Ghostscriptを使用して、複数のPDFを1つにマージするこのすてきなコマンドを見つけました。
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf
結果のサイズは、2つのPDFの合計サイズよりも小さくなります。
単一のファイルを入力としてコマンドを実行すると、出力ファイルのサイズが小さくなります。
Ghostscriptには、圧縮せずにマージ時に表示されるページをそのままコピーするオプションがありますか?
そうでない場合、Ghostscript圧縮が非常に優れているため、品質がまったく低下しない可能性はありますか?
以下に、デバイスにpdfwrite
を使用するときに渡すことができる 追加オプション を示します。そのページによれば、何も渡さなければ-dPDFSETTINGS
は/screen
に近い値に設定されますが、より具体的にはなりません。 -dPDFSETTINGS=/prepress
に設定してみてください。300dpiを超えるものだけを圧縮します。
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=out.pdf in1.pdf in2.pdf
別の選択肢は pdftk :
pdftk in1.pdf in2.pdf cat output out.pdf
観察したサイズの最適化の一部は、Ghostscriptの未使用オブジェクトのクリーンアップ、最近取得したフォント最適化の改善(GSの最新バージョンを使用していますか?!?)、およびおそらく起こりました。
GhostscriptをPDF-> PDF変換に使用すると、基本的に次のように動作します。
つまり、ほとんどのPDF-> PDF操作では、PDFオブジェクトの順序と番号付けが異なり、オブジェクトの内部コードさえ変更されている可能性があります(たとえ目が ' t入力PDFと出力PDFの違いを発見します)。
デフォルトでは、Ghostscriptは元のファイルで圧縮されていないオブジェクトストリームも圧縮します(ただし、これは可逆圧縮です)。
これで非常に単純なコマンドライン操作の希望を含まない、Ghostscript assumesで-dPDFSETTINGS=/default
を使用し、このパラメーターを暗黙的に設定し、それに応じて動作します。
これでwhatは/default
PDFSETTINGSですか?!調べるには2つのオプションがあります。
マニュアルを読む。このセクションの中央にある大きな table は概要を示しています。この-dPDFSETTINGS=/default
自体は、それが表す数十個の他のより具体的な設定の単なる省略形であることがわかります。提供されているドキュメントへのリンクは、開発コードの現在のHEADであり、実際に使用されるバージョンはもちろん異なる場合があります。
この設定の詳細な意味については、(独自の)Ghostscriptに問い合わせてください。質問に対する私の答え '出力デバイスのデフォルトのオプション/設定についてGhostscriptに照会しています... ' および質問 ' PostScript辞書とは何ですか? (Ghostscriptを介して)どのようにアクセスできますか? ' これについてもう少し詳しく説明します。つまり、Ghostscriptに/default
PDFSETTINGSの詳細を照会するには、次のコマンドを実行します。
gs \
-q \
-dNODISPLAY \
-c ".distillersettings /default get {exch ==only ( ) print ===} forall quit"
次のような結果が得られるはずです。
/Optimize false
/DoThumbnails false
/PreserveEPSInfo true
/ColorConversionStrategy /LeaveColorUnchanged
/DownsampleMonoImages false
/EmbedAllFonts true
/CannotEmbedFontPolicy /Warning
/PreserveOPIComments true
/GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >>
/DownsampleColorImages false
/PreserveOverprintSettings true
/CreateJobTicket false
/AutoRotatePages /PageByPage
/NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats]
/ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >>
/DownsampleGrayImages false
/UCRandBGInfo /Preserve
これらから際立っている唯一のポイント:/AutoRotagePages
を/PageByPage
から/None
に変更したい場合があります。コマンドラインでは、-dAutoRotatePages=/None
として配置します。
これらのパラメーターを追加することにより、入力PDFに可能な限り多くのpassthroughモードを使用するよう具体的にGhostscriptに指示するパラメーターの完全なリストを提供するには:
-dAntiAliasColorImage=false \
-dAntiAliasGrayImage=false \
-dAntiAliasMonoImage=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dDownsampleColorImages=false \
-dDownsampleGrayImages=false \
-dDownsampleMonoImages=false \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dConvertCMYKImagesToRGB=false \
-dConvertImagesToIndexed=false \
-dUCRandBGInfo=/Preserve \
-dPreserveHalftoneInfo=true \
-dPreserveOPIComments=true \
-dPreserveOverprintSettings=true \
したがって、このコマンドを試すことができます:
gs \
-o output.pdf \
-sDEVICE=pdfwrite \
-dAntiAliasColorImage=false \
-dAntiAliasGrayImage=false \
-dAntiAliasMonoImage=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dDownsampleColorImages=false \
-dDownsampleGrayImages=false \
-dDownsampleMonoImages=false \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dConvertCMYKImagesToRGB=false \
-dConvertImagesToIndexed=false \
-dUCRandBGInfo=/Preserve \
-dPreserveHalftoneInfo=true \
-dPreserveOPIComments=true \
-dPreserveOverprintSettings=true \
input1.pdf \
input2.pdf
最後に、クリス・ハースがすでに示唆したように:特に最適化が不要な場合は、pdftk
を使用することもできます Ghostscriptはデフォルトで適用されます。 pdftk
は単にそのようなことを行うことができず、操作の相対的な鈍さのためにかなりの速度を得ることができます(ただし、Ghostscriptよりもはるかに大きなファイルサイズの出力も可能です)。