2

私が達成しようとしているのは、bbox で説明されている出力を使用して、example.ps という PostScript ファイルをトリミングすることです。特定のファイルでは bbox が異なる可能性があるバッチ プロセスでこれを行っています。pdfcrop を調べたところ、同様のアプローチが使用されていることがわかりました。これが、現在トリミングに使用しているコマンドです。

gs -o cropped.pdf \
   -sDEVICE=pdfwrite \
   -dDEVICEWIDTHPOINTS=160 \
   -dDEVICEHEIGHTPOINTS=840 \
   -dFIXEDMEDIA \
   -c "0 0 translate 0 0 160 840 rectclip" \
   -f  example.ps

このコマンドの問題は、使用する幅と高さを指定する必要があることです。私がやりたいことは、最初に bbox を呼び出してから、コードまたはコマンドラインリダイレクトを使用してこのステートメントを呼び出す方法です。

4

1 に答える 1

3

まず、複数ページのPostScriptファイルのすべてのページにまったく同じ「バウンディングボックス」値が表示されるわけではないことに注意してください(実際、これはかなりまれです)。したがって、考えられるすべての境界ボックス(すべてを含む)に共通する分母を見つけたいと思うでしょう。

次に、実行時にコンソールウィンドウに表示されるのは、 stdinstdoutの出力チャネルgs -sDEVICE=bboxの組み合わせです。ただし、必要な情報はstderrに送信されます。コマンド出力をファイルにリダイレクトすると、stderrではなくstdoutがキャプチャされます。stderrに送信されるバージョンとデバッグ情報の一部を抑制するには、コマンドラインに追加します。-q

したがって、すべてのページのバウンディングボックスの'クリーン*出力を取得するには、最初にstderrチャネルをリダイレクトする必要があります。次に、ファイルinfo.txtにキャプチャします。したがって、次のような(または同様の)コマンドを実行します。

gs              \
  -dBATCH       \
  -dNOPAUSE     \
  -q            \
  -sDEVICE=bbox \
   example.ps   \
2>&1            \
| tee info.txt

またはこれでさえ、あなたが:についての情報を必要としないならばHiResBoundingBox

gs              \
  -dBATCH       \
  -dNOPAUSE     \
  -q            \
  -sDEVICE=bbox \
   example.ps   \
2>&1            \
| grep ^%%Bound \
| tee info.txt

また、ところで、PostScriptとPDF入力ファイルのバウンディングボックスを決定できることに注意してください。

これにより、次のような出力が得られます。各行は、最初の行の1ページ目から始まる入力ファイルのページを表します。

 %%BoundingBox: 36 18 553 802
 %%BoundingBox: 37 18 553 804
 %%BoundingBox: 36 18 553 802
 %%BoundingBox: 37 668 552 803
 %%BoundingBox: 40 68 532 757

最後に、 Ghostscriptのbboxデバイスに関する背景情報について、次の回答を読んでください。そこには、トリミングジョブ用の代替PostScriptコードもいくつかあります。

于 2012-12-25T12:37:21.747 に答える