PDFファイルを最適化し、ファイルサイズを小さくしたい場合、Ghostscriptは最適なオプションですか?
PDFファイルを大量に保存する必要があるため、可能な限りファイルサイズを最適化および縮小する必要があります
Ghostscriptやその他の経験がある人はいますか?
exec('gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4
-dPDFSETTINGS=/screen -sOutputFile='.$file_new.' '.$file);
無料(「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
これで、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、デフォルトでは使用していませんでした。)
PDF=からPostscriptに変換してから、PDF
pdf2ps file.pdf file.ps
ps2pdf -dPDFSETTINGS=/ebook file.ps file-optimized.pdf
引数-dPDFSETTINGS
の値は、結果のPDFの画像の品質を定義します。オプションは、低品質から高品質まで:/screen
、/default
、/ebook
、/printer
、/prepress
、 http:// milanを参照してください。 kupcevic.net/ghostscript-ps-pdf/ 参照用.
Postscriptファイルは非常に大きくなる可能性がありますが、結果には価値があります。 60 MB PDFから140 MBのPostscriptファイルに移行しましたが、最終的には1.1 MBの最適化されたPDFになりました。
here から取得した次のオプションでGhostscriptを使用します。
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
pdftocairo
( Poppler から)は小さなPDFを作成できますが、一部の機能(ハイパーリンクなど)が取り除かれることに注意してください。
品質は低下しますが、問題でない場合は、ImageMagickのconvert
が役立つことがありますprove:
convert original.pdf reduced.pdf
常に機能するとは限らないことに注意してください。このコマンドを使用して126MBのファイルを14MBに変換したことがありますが、350KBのファイルのサイズが2倍になりました。
とにかく試してみる価値はあります…
コメントで述べたように、もちろんこのコマンドをベクターベースのPDFに適用しても意味はありません。ラスタライズされた画像でのみ有用です。
関連オプションについては this post もご覧ください。
Ghostscriptには、pdfopt
およびps2pdf14
。両方を使用してPDFファイル)を最適化できますが、「最適化された」ファイルのサイズが元のサイズよりも大きい場合があります。
これは私のために働いた
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/