Ghostscriptを使用しますが、画像を再処理しないように指示しますか?


30

既に圧縮されたやや不自然な画像が含まれるPDFがあり、Ghostscriptを使用してそのPDFにタイトルページを追加しています。

ただし、既存の画像を再処理せずにそのまま使用するようにGSに指示する方法を見つけることができず、今ではGSの動作に関係しているように感じています。つまり、PDFを再コンパイル/リンクできないその画像を再処理することなく..それは本当ですか?

GSでDPIの設定を上げることはできますが、5MBから60MBになりますが、それでも悪化します。

私が必要とすることをするGSのより良い代替物はありますか(できればOS Xでコンパイルします)?


質問を編集して、タイトルページを元のPDFの先頭に追加するために使用している正確なコマンドラインを引用できますか?それから私は...変化に正確に何を教えてくれたり、画像のためのより良い出力を得るためにコマンドラインに追加することができます
クルトPfeifle

見た目が良くなるだけでなく、再処理せずにマージしたいと思います。これにより、a)より良い品質(ロスレス変換)が得られ、b)1000時間以上のページドキュメントを処理するCPU時間を無駄にすることがなくなります。
マフムードアルクッディ

1
ねえ、あなたは私の質問に答えなかったし、あなたが使っている正確なGSコマンドラインを引用しなかった。どの手段:あなたが探しているGSに関するヘルプを参照することではないでしょう...
クルトPfeifle

回答:


44

コンテンツを再処理せずに2つのPDFファイルを連結するだけの場合は、それが最適pdftkです。(Mac OS Xでは、これはMacPortsまたはFinkを介して利用できるはずです。Linuxには、すべての主要なディストリビューション用のネイティブパッケージがあります。Windowsの場合は、こちらをご覧ください。

 pdftk title.pdf content.pdf cat output book.pdf

これは、付加しますtitle.pdfをするcontent.pdfとに結果を書き込みbook.pdf

pdftk「ダム」ですが、2つ(またはそれ以上)のPDFファイルを連結する非常に高速な方法です。これまでの「ダム」は、としてpdftkどのような方法ではありません解釈 PDFデータ・ストリームを、それだけで、必要に応じて内部オブジェクト番号は再改造されていることを確認しますとPDFで表示されるxref構造(基本的にPDFの一種である目次のためのオブジェクト)。

Ghostscript:

Ghostscriptを使用する場合、同じ2つのファイルを連結する基本的なコマンドは次のとおりです。

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
   title.pdf \
   content.pdf

ただし、これまでに経験したように、この単純なコマンドラインは画質を台無しにする可能性があります。その理由は、GhostscriptがPDFを処理するときに「ダンプ」ではないためです。読み込み時に完全に解釈し、結果を書き込むときに完全に新しいファイルを作成します。結果を作成するために、処理全体の多くの詳細についてデフォルト設定が自動的に使用されます。これらのデフォルトは、その呼び出しがGhostscriptに別の方法で指示しなかったすべての場合に適用されます。

したがって、新しいbook.pdfを作成するGhostscriptの方法は、の方法よりもはるかに「インテリジェント」です(ただし、はるかに低速です)pdftk(これは、多くの場合、Ghostscriptがb0rken PDFファイルを「制限内」で「修復」したり、入力PDFに埋め込まれていない出力PDFにフォントを埋め込んだり、重複した画像を削除したり、それらは単なる参照などによって-そして全体的に、肥大化した入力PDFからより小さく最適化されたファイルを作成しました...

解決策は、Ghostscriptにデフォルトを使用させないことです。コマンドラインにカスタムパラメータを追加します。

「GhostscriptはそのPDF入力を「解釈」するとはどういう意味ですか?

すべてのファイルとそのコンテンツ(オブジェクト、ストリーム、フォント、画像など)が読み込まれ、チェックされ、独自の内部表現で保持された後、結果のPDFをPDFオブジェクトで再度出力します。ただし、「吐き出す」場合、Ghostscript は使用可能な数百のパラメーター[*]にすべての内部デフォルト設定を適用します。

残念ながら、これにより、これらのデフォルト設定に従って画像の「再処理」が行われます。これは、独自の(望ましい)コマンドラインパラメータを追加することによってのみ回避または上書きできます。

画像の問題は、Ghostscriptが(ライセンスの問題により)JPEG2000画像をJPEGエンコーディングに再エンコードする必要があるために発生する可能性があります。これを避けたい場合は、コマンドラインに次を追加してください:

-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \

含めることを検討する他の画像関連のコマンドラインオプションは次のとおりです。

-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \

したがって、あなたを幸せにすることができる完全なGhostscriptコマンドラインは次のように読むべきです:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dDownsampleMonoImages=false \
  -dDownsampleGrayImages=false \
  -dDownsampleColorImages=false \
  -dAutoFilterColorImages=false \
  -dAutoFilterGrayImages=false \
  -dColorImageFilter=/FlateEncode \
  -dGrayImageFilter=/FlateEncode \
   title.pdf \
   content.pdf

次のコマンドラインを使用して、出力PDFで画像をまったく圧縮しないようにGhostscriptに指示することもできます。

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dEncodeColorImages=false \
  -dEncodeGrayImages=false \
  -dEncodeMonoImages=false \
   title.pdf \
   content.pdf


[*]:Ghostscriptのpdfwriteデバイスが使用しているデフォルト設定の完全なリスト
について知りたい場合は、次のコマンドを実行します。完全なリストが返されます。

 gs \
   -sDEVICE=pdfwrite \
   -o /dev/null \
   -c "currentpagedevice { exch ==only ( ) print == } forall"

これらすべてのパラメーターの正確な意味についての説明は、「Distiller Parameters」に関するアドビのドキュメントを参照する必要があります。Ghostscriptは、これらすべてをまねようと非常に努力します...


3
(FYI)私の場合は、フラグdEncodeColorImagesdEncodeGrayImagesdEncodeMonoImages出力ファイルは、より大規模な多くになることが。それらを削除すると、ファイルサイズが22MBから3.1MBに変更され、画質はこれらのフラグを使用した場合とまったく同じように見えます。すべてのユニークな Iとフラグを使用している:dColorConversionStrategy=/LeaveColorUnchangeddDownsampleMonoImages=falsedDownsampleGrayImages=falsedDownsampleColorImages=falsedAutoFilterColorImages=falsedAutoFilterGrayImages=falsedColorImageFilter=/FlateEncodedGrayImageFilter=/FlateEncode
ドール

@Kurt Pfeifleどのオプションが許可されてい-dColorImageFilterますか?私は見つけることができるFlateEncodeDCTEncode。DCTはJPEGを実行しているようです(なぜ暗号化したのですか?)。ベルラボのLZWに関する特許はもはや問題ではないので、FLATEは今では画像の時代遅れのオプションだと思いますか?しかし、検索にかなりの時間を費やした後、PNG(または他の何か)の使用方法を見つけることができません。私は、-cオプションを試してみましたが、それは私を与える-c can only be used in a built with POSTSCRIPT included....
ルイ・ソマーズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.