web-dev-qa-db-ja.com

PDFをGhostscriptで分割する

私はマルチページを分割しようとします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を使用する場合、これは正常ですか?私は何か間違ったことをしていますか?

31
zseder

表示されるのは「通常の」動作です。Ghostscriptの現在のバージョンのpdfwrite出力デバイスは、この機能をサポートしていません。これは se.htm にも(確かに、漠然と)文書化されています。

"ただし、ファイルごとに1ページの機能は、すべてのデバイスでサポートされているとは限りません。.."

IRC彼らはmayの将来のリリースでこの機能をpdfwriteに追加することを述べましたが、いくつかの主要なコードが必要になるようです。)書き換え、それが彼らがまだそれをしていない理由です...


更新:バージョン9.06 (2012年7月31日にリリース)の時点でGordonのコメントはすでに示唆されているため、Ghostscriptがサポートするようになりましたpdfwriteについても質問で引用したコマンドライン。 (Gordonはこれに対する非公式のサポートをすでに9.05で発見しているに違いありません、または彼はまだ9.06としてタグ付けされていないプレリリースソースから彼自身の実行可能ファイルをコンパイルしました)。

11
Kurt Pfeifle

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で使用できます。

19
Juanito Fatas
 #!/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
5
John Ostrowick

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で動作します。

楽しい。

3
mmj

簡単な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))
1
Adobe