web-dev-qa-db-ja.com

最適化PDFファイル(Ghostscriptまたはその他を使用)

PDFファイルを最適化し、ファイルサイズを小さくしたい場合、Ghostscriptは最適なオプションですか?

PDFファイルを大量に保存する必要があるため、可能な限りファイルサイズを最適化および縮小する必要があります

Ghostscriptやその他の経験がある人はいますか?

コマンドライン

exec('gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/screen -sOutputFile='.$file_new.' '.$file);
48
clarkk

無料(「libre」など)のソフトウェアをお探しの場合は、Ghostscriptが最適です。ただし、常に使いやすいとは限りません。その(非常に強力な)処理オプションの一部は、文書化されたものを見つけるのが簡単ではありません。

一般的な-dPDFSETTINGS=/screenが実行するものよりも詳細な画像解像度のダウンサンプリングの制御を実行する方法を説明するこの回答をご覧ください(いくつかの全体的なデフォルトを定義しますが、オーバーライドすることもできます)。

基本的に、Ghostscriptですべての画像を72dpiの解像度にダウンサンプリングする方法を示します(この値は-dPDFSETTINGS=/screenが使用するものです。さらに低くすることもできます)。

-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=72 \
-dGrayImageResolution=72 \
-dMonoImageResolution=72 \

Ghostscriptが使用するフォントも「埋め込み解除」できるかどうか試してみたい場合(場合によっては動作しますが、埋め込みフォントの複雑さに応じて、 使用するフォントタイプ )で、gsコマンドに次を追加してみてください。

gs \
  -o output.pdf \
   [...other options...] \
  -dEmbedAllFonts=false \
  -dSubsetFonts=true \
  -dConvertCMYKImagesToRGB=true \
  -dCompressFonts=true \
  -c ".setpdfwrite <</AlwaysEmbed [ ]>> setdistillerparams" \
  -c ".setpdfwrite <</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 /Arial]>> setdistillerparams" \
  -f input.pdf

注:画像の解像度をダウンサンプリングすると品質が確実に(不可逆的に)低下し、フォントの埋め込みを解除すると表示や印刷が困難または不可能になることに注意してください同じフォントがマシンにインストールされていない限り、PDF ...


更新

私の元の答えで見落としていた1つのオプションは、追加することです

-dDetectDuplicateImages=true

コマンドラインに。このパラメータにより、GhostscriptはPDFに複数回埋め込まれている画像を検出しようとします。これは、ロゴまたはページの背景として画像を使用し、PDF生成ソフトウェアがこの状況に最適化されていない場合に発生する可能性があります。これは、以前のバージョンのOpenOffice/LibreOfficeの場合に当てはまりました(LibreOfficeの最新リリースv4.3.5.2をテストしましたが、もはやそのような愚かなことはしません)。

pdftkを使用してPDFファイルを連結した場合にも発生します。効果とその発見方法を示すために、サンプルPDFファイルを見てみましょう。

pdfinfo p1.pdf

 Producer:       libtiff / tiff2pdf - 20120922
 CreationDate:   Tue Jan  6 19:36:34 2015
 ModDate:        Tue Jan  6 19:36:34 2015
 Tagged:         no
 UserProperties: no
 Suspects:       no
 Form:           none
 JavaScript:     no
 Pages:          1
 Encrypted:      no
 Page size:      595 x 842 pts (A4)
 Page rot:       0
 File size:      20983 bytes
 Optimized:      no
 PDF version:    1.1

Popplerのpdfimagesユーティリティの最近のバージョンは、PDFファイルに含まれるすべての画像をリストできる-listパラメーターのサポートを追加しました。

pdfimages -list p1.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image    423   600   rgb    3   8 jpeg     no     7  0    52    52 19.2K 2.6%

このサンプルPDFは1ページのドキュメントで、JPEG圧縮で圧縮された画像を含み、幅423ピクセル、高さ600ピクセルで、52 PPIページ。

pdftkを使用してこのファイルの3つのコピーを連結すると、次のようになります。

pdftk p1.pdf p1.pdf p1.pdf cat output p3.pdf

その結果、pdfimages -listを介してこれらの画像プロパティが表示されます。

pdfimages -list p3.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no     4  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no     8  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    12  0    52    52 19.2K 2.6%

これは、現在p3.pdfに埋め込まれている3つの同一のPDFオブジェクト(ID 4、8、および12)があることを示しています。 p3.pdfは3ページで構成されています。

pdfinfo p3.pdf | grep Pages:

 Pages:          3

重複する画像を参照で置き換えることにより、PDFを最適化する

これで、Ghostscriptを使用して上記の最適化を適用できます。

 gs -o p3-optim.pdf -sDEVICE=pdfwrite -dDetectDuplicateImages=true p3.pdf

確認:

 pdfimages -list p3-optim.pdf

 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    2   1 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%
    3   2 image   423    600   rgb    3   8 jpeg     no    10  0    52    52 19.2K 2.6%

ページごとにまだ1つの画像がリストされていますが、PDFオブジェクトIDは常に同じです:10。

 ls -ltrh p1.pdf p3.pdf p3-optim.pdf

   -rw-r--r--@ 1 kp  staff    20K Jan  6 19:36 p1.pdf
   -rw-r--r--  1 kp  staff    60K Jan  6 19:37 p3.pdf
   -rw-r--r--  1 kp  staff    16K Jan  6 19:40 p3-optim.pdf

ご覧のとおり、pdftkで作成された「ダム」連結により、元のファイルサイズが元のファイルサイズの3倍に増加しました。 Ghostscriptによる最適化により、かなりの量がダウンしました。

Ghostscriptの最新バージョンは、デフォルトで-dDetectDuplicateImagesを適用する場合もあります。 (初めて導入したAFAIR v9.02、デフォルトでは使用していませんでした。)

74
Kurt Pfeifle

PDF=からPostscriptに変換してから、PDF

pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf

引数-dPDFSETTINGSの値は、結果のPDFの画像の品質を定義します。オプションは、低品質から高品質まで:/screen/default/ebook/printer/prepresshttp:// milanを参照してください。 kupcevic.net/ghostscript-ps-pdf/ 参照用.

Postscriptファイルは非常に大きくなる可能性がありますが、結果には価値があります。 60 MB PDFから140 MBのPostscriptファイルに移行しましたが、最終的には1.1 MBの最適化されたPDFになりました。

27

here から取得した次のオプションでGhostscriptを使用します。

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \
 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
7
Primoz Rome

pdftocairoPoppler から)は小さなPDFを作成できますが、一部の機能(ハイパーリンクなど)が取り除かれることに注意してください。

5
Anon

品質は低下しますが、問題でない場合は、ImageMagickのconvertが役立つことがありますprove:

convert original.pdf reduced.pdf

常に機能するとは限らないことに注意してください。このコマンドを使用して126MBのファイルを14MBに変換したことがありますが、350KBのファイルのサイズが2倍になりました。

とにかく試してみる価値はあります…

コメントで述べたように、もちろんこのコマンドをベクターベースのPDFに適用しても意味はありません。ラスタライズされた画像でのみ有用です。

関連オプションについては this post もご覧ください。

Ghostscriptには、pdfoptおよびps2pdf14。両方を使用してPDFファイル)を最適化できますが、「最適化された」ファイルのサイズが元のサイズよりも大きい場合があります。

3
Onlyjob

これは私のために働いた

PDF= PSに変換します(これにより大きなファイルが作成されます

pdf2ps large.pdf very_large.ps

新しいPSをPDFに戻す

ps2pdf very_large.ps small.pdf

ソース: https://pandemoniumillusion.wordpress.com/2008/05/07/compress-a-pdf-with-pdftk/

2