2

Ghostscript を使用して、URL からダウンロードされた 2 つの PDF ファイルを結合する 1 行の Linux コマンドを作成しようとしています。ただし、一時ファイルを作成したくありません(すべてメモリ内で行う必要があります)。

次のコマンドは機能していないようです (プロセス置換によってこれを達成しようとしました)。

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=combined.pdf <(curl http://example.com/one.pdf) <(curl http://example.com/two.pdf)

このコマンドを実行すると、以下のエラーが表示されます。

**** Warning:  An error occurred while reading an XREF table.
**** The file has been damaged.  This may have been caused
**** by a problem while converting or transfering the file.
**** Ghostscript will attempt to recover the data.
Error: /ioerror in --run--
Current allocation mode is local
Last OS error: Illegal seek
GPL Ghostscript 9.18: Unrecoverable error, exit code 1

2 つの入力 PDF のダウンロードが完了する前に、Ghostscript コマンドが実行されていると思われます。おそらく、これが発生するのを待つ方法があります。

4

1 に答える 1

0

ここにはいくつかの問題があります。

まず、Ghostscript と pdfwrite デバイスは PDF ファイルを結合しません。入力は完全に解釈され、グラフィック プリミティブに変換され、デバイスにディスパッチされます。レンダリング デバイスは、グラフィックス ライブラリを使用してプリミティブをビットマップにレンダリングします。ベクトル デバイスは、プリミティブの高レベル表現を作成し、適切な言語で出力に書き込みます。そのため、出力ファイルの内容は入力ファイルの内容とは関係がないことに注意することが重要です。レンダリングされたときの視覚的な結果だけが同じであるべきです。

次に、一時ファイルを避けることはできません。stdin を介して PDF ファイルを Ghostscript にパイプすると、単純に一時ファイルが作成され、ファイル全体がその中に保存されます。これは、PDF ファイルを解釈するためにランダム アクセスが必要なため必要です。

最後に、コマンド ラインで stdin から 2 回パイプすることはできません。2 つのファイルを処理するには、Ghostscript への独自のインターフェイスを作成し、ストリーム インターフェイスを使用してデータを送信するか、両方をコマンド ラインに配置する必要があります。

そう: gs file1.pdf file2.pdf

あなたがやろうとしていることは単にうまくいかず、いずれにせよ2つのPDFファイルの作成を妨げるものではありません.Ghostscriptがあなたのためにそれらを見ることができない場所にそれらを作成するだけです.

于 2016-10-18T07:59:23.403 に答える