56

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

大量の PDF ファイルを保存する必要があるため、最適化してファイル サイズを可能な限り小さくする必要があります。

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

コマンドライン

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

8 に答える 8

92

フリー (「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 をテストしましたが、もはやそのような愚かなことはしません)。

を使用して PDF ファイルを連結した場合にも発生しますpdftk。効果とその発見方法を示すために、サンプルの 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ユーティリティの最近のバージョンで-listは、PDF ファイルに含まれるすべての画像を一覧表示できるパラメーターのサポートが追加されました。

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 の解像度でレンダリングされます。

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

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%

これは、現在埋め込まれている 3 つの同一の PDF オブジェクト (ID 4、8、および 12 を持つ) があることを示していますp3.pdfp3.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 では、デフォルトでは使用されませんでした。)

于 2012-05-04T17:07:04.640 に答える
35

PDF から Postscript に変換してから、次を使用して PDF に戻すと、良い結果が得られます。

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

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

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

于 2013-01-17T16:58:27.780 に答える
3

品質が低下しますが、問題がなければ、ImageMagickconvertが役立つ可能性があります。

convert original.pdf reduced.pdf

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

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

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

関連するオプションについては、この投稿も参照してください。

于 2015-05-30T17:25:53.957 に答える
3

これは私のために働いた

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/

于 2016-11-23T12:02:39.523 に答える