1

私は、それぞれが複数の複数ページのドキュメントを含む大量のPostScriptファイルを生成するシステムを持っています。これらの大きなPostScriptドキュメントを取得し、それぞれから複数のPDFドキュメントを出力するスクリプトを作成したいと思います。

たとえば、1つのポストスクリプトファイルには、顧客への200通の手紙が含まれています。各手紙の長さは10ページです。この追記ファイルには2000ページが含まれています。この1psのドキュメント、200x 10ページのPDFから、顧客ごとに1つずつ出力したいと思います。

GhostScriptがこのレベルのドキュメント操作を行う方法だと思いますが、最善の方法がわかりません-入力psファイルの「1〜10ページ」を取得する関数がGhostScriptにありますか?psファイル全体を2000個の個別のpsファイル(ページごとに1つ)として出力してから、それらを再び結合する必要がありますか?

または、GhostScript以外の何かで私の目標を達成するためのはるかに簡単な方法はありますか?

どうもありがとう、
ベン

4

3 に答える 3

2

技術的には、これはGhostscriptの次のリリースで、またはGitリポジトリのHEADコードを使用して可能になります。pdfwriteを使用しているときにデバイスを切り替えることができるようになりました。これにより、デバイスが閉じて現在のPDFファイルが完成します。もう一度切り替えると、新しいものが開始されます。

これをページデバイスディクショナリのBeginPageおよび/またはEndPageプロシージャと組み合わせると、必要なことを実行できるはずです。

警告; 私はこれを試したことがありません。それを機能させるには、PostScriptプログラミングが必要です。

PostScriptの性質上、ファイルから'N'番目のページを抽出する方法はありません。したがって、ページの範囲を指定する方法はありません。

lsemiが示唆しているように、最初に1つの大きなPDFファイルに変換してから、必要な範囲を抽出することができます。GhostscriptはFirstPageスイッチとLastPageスイッチを使用してこれを行うことができます(PostScriptとは異なり、PDFファイルから特定のページを抽出することができます)。

于 2012-07-17T14:32:30.927 に答える
1

まず、PSをPDFオブジェクトコレクションに作成し(またはPDFWriterデバイスに印刷してGhostScriptから直接PDFを生成し)、次にpdftkを使用して大きなPDFから「切り取り」ます。これは非常に高速です。

于 2012-07-17T14:26:02.850 に答える
0

Ghostscriptを使用して、最初に完全なPDFファイルを作成します。

 gs \
   -o 2000p.pdf \
   -sDEVICE=pdfwrite \
   -dPDFSETTINGS=/prepress \
    2000p.ps

pdftkを使用して、それぞれ10ページのPDFファイルを抽出します。

 for i in $(seq 0 10 199); do \
     export start=$(( ${i} * 1 + 1 )); \
     export end=$(( ${start} + 9 ));  \
     pdftk \
        2000p.pdf \
        cat ${start}-${end} \
        output pages---${start}..${end}.pdf; \
 done

最初に次の内容で「2000p.ps」という名前のサンプルPostScriptファイルを作成することにより、Ghostscriptに2000ページのサンプル+テストPDFを生成させることができます。

 %!PS
 /H1 {/Helvetica findfont 48 scalefont setfont .2 .2 1 setrgbcolor} def
 /pageframe  {1 0 0 setrgbcolor 2 setlinewidth 10 10 575 822 rectstroke} def
 /gopageno {H1 300 700 moveto } def
 1 1 2000 {pageframe gopageno
    4 string cvs
    dup stringwidth pop
    -1 mul 0 rmoveto
    show
    showpage} for

次に、次のコマンドを実行します。

 gs -o 2000p.pdf -sDEVICE=pdfwrite -g5950x8420 2000p.ps
于 2012-07-18T10:27:08.040 に答える