私はマルチページを分割しようとしますPDF Ghostscriptで、より多くのサイト、そして ghostscript.com でも同じ解決策を見つけました:
gs -sDEVICE=pdfwrite -dSAFER -o outname.%d.pdf input.pdf
しかし、すべてのページを含み、outname.1.pdfという名前の1つのファイルを生成するため、私にとっては機能しないようです。
開始ページと終了ページを追加すると、正常に機能しますが、これらのパラメーターを知らなくても機能させたいと思います。
Gs-develアーカイブで、私はこれの解決策を見つけました: http://ghostscript.com/pipermail/gs-devel/2009-April/008310.html -しかし、私はそれをやる気がしますpdf_info
なし。
別のデバイス、たとえばpswrite
を使用しますが、パラメータは同じですが、正常に機能し、myinput.pdf含む。
pdfwrite
を使用する場合、これは正常ですか?私は何か間違ったことをしていますか?
表示されるのは「通常の」動作です。Ghostscriptの現在のバージョンのpdfwrite
出力デバイスは、この機能をサポートしていません。これは se.htm にも(確かに、漠然と)文書化されています。
"ただし、ファイルごとに1ページの機能は、すべてのデバイスでサポートされているとは限りません。.."
IRC彼らはmayの将来のリリースでこの機能をpdfwriteに追加することを述べましたが、いくつかの主要なコードが必要になるようです。)書き換え、それが彼らがまだそれをしていない理由です...
更新:バージョン9.06 (2012年7月31日にリリース)の時点でGordonのコメントはすでに示唆されているため、Ghostscriptがサポートするようになりましたpdfwrite
についても質問で引用したコマンドライン。 (Gordonはこれに対する非公式のサポートをすでに9.05で発見しているに違いありません、または彼はまだ9.06としてタグ付けされていないプレリリースソースから彼自身の実行可能ファイルをコンパイルしました)。
Weimer氏が作成したこのスクリプトは非常に便利です。
#!/bin/sh
#
# pdfsplit [input.pdf] [first_page] [last_page] [output.pdf]
#
# Example: pdfsplit big_file.pdf 10 20 pages_ten_to_twenty.pdf
#
# written by: Westley Weimer, Wed Mar 19 17:58:09 EDT 2008
#
# The trick: ghostscript (gs) will do PDF splitting for you, it's just not
# obvious and the required defines are not listed in the manual page.
if [ $# -lt 4 ]
then
echo "Usage: pdfsplit input.pdf first_page last_page output.pdf"
exit 1
fi
yes | gs -dBATCH -sOutputFile="$4" -dFirstPage=$2 -dLastPage=$3 -sDEVICE=pdfwrite "$1" >& /dev/null
起源: http://www.cs.virginia.edu/~weimer/pdfsplit/pdfsplit
pdfsplit.sh
として保存してください。魔法が起こるのを見てください。
[〜#〜] pdfsam [〜#〜] もこの作業を実行できます。 WindowsおよびMacで使用できます。
#!/bin/bash
#where $1 is the input filename
ournum=`gs -q -dNODISPLAY -c "("$1") (r) file runpdfbegin pdfpagecount = quit" 2>/dev/null`
echo "Processing $ournum pages"
counter=1
while [ $counter -le $ournum ] ; do
newname=`echo $1 | sed -e s/\.pdf//g`
reallynewname=$newname-$counter.pdf
counterplus=$((counter+1))
# make the individual pdf page
yes | gs -dBATCH -sOutputFile="$reallynewname" -dFirstPage=$counter -dLastPage=$counter -sDEVICE=pdfwrite "$1" >& /dev/null
counter=$counterplus
done
Ghostscriptがインストールされている場合のWindowsコマンドプロンプト(ドラッグアンドドロップでも機能)のスクリプトを次に示します。
@echo off
chcp 65001
setlocal enabledelayedexpansion
rem Customize or remove this line if you already have Ghostscript folders in your system PATH
set path=C:\Program Files\gs\gs9.22\lib;C:\Program Files\gs\gs9.22\bin;%path%
:start
echo Splitting "%~n1%~x1" into standalone single pages...
cd %~d1%~p1
rem getting number of pages of PDF with GhostScript
for /f "usebackq delims=" %%a in (`gswin64c -q -dNODISPLAY -c "(%~n1%~x1) (r) file runpdfbegin pdfpagecount = quit"`) do set "numpages=%%a"
for /L %%n in (1,1,%numpages%) do (
echo Extracting page %%n of %numpages%...
set "x=00%%n"
set "x=!x:~-3!"
gswin64c.exe -dNumRenderingThreads=2 -dBATCH -dNOPAUSE -dQUIET -dFirstPage=%%n -dLastPage=%%n -sDEVICE=pdfwrite -sOutputFile="%~d1%~p1%~n1-!x!.pdf" "%1"
)
shift
if NOT x%1==x goto start
pause
このスクリプトにsplit PDF.bat
のような名前を付けて、デスクトップに配置します。 1つ(またはそれ以上)のマルチページをドラッグアンドドロップしますPDFその上にPDFの各ページに1つのスタンドアロンPDFファイルを作成し、接尾辞-001
を追加します、-002
などを使用して、ページを区別します。
システムのPATH環境変数にGhostscriptフォルダーがすでにある場合は、(関連するGhostscriptバージョンを使用して)カスタマイズするか、set path=...
行を削除する必要がある場合があります。
Ghostscript 9.22がインストールされたWindows 10で動作します。
楽しい。
簡単なpythonスクリプトがこれを実行します:
#!/usr/bin/python3
import os
number_of_pages = 68
input_pdf = "abstracts_rev09.pdf"
for i in range(1, number_of_pages +1):
os.system("gs -q -dBATCH -dNOPAUSE -sOutputFile=page{page:04d}.pdf"
" -dFirstPage={page} -dLastPage={page}"
" -sDEVICE=pdfwrite {input_pdf}"
.format(page=i, input_pdf=input_pdf))