ここから取得した次のオプションで Ghostscript を使用します。
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen \
-dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
pdftocairo
が見つかるかもしれません (Poppler から) 小さな PDF を作成できますが、一部の機能 (ハイパーリンクなど) が取り除かれることに注意してください。
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 ファイルに変更しましたが、最適化された PDF は 1.1 MB になりました。
フリー (「libre」のような) ソフトウェアを探しているなら、Ghostscript が最適です。ただし、使いやすいとは限りません。その (非常に強力な) 処理オプションのいくつかは、文書化されているのを簡単に見つけることができません。
一般的な -dPDFSETTINGS=/screen
よりも画像解像度のダウンサンプリングをより詳細に制御する方法を説明するこの回答をご覧ください。 します (これはいくつかの全体的なデフォルトを定義しますが、これをオーバーライドすることもできます):
- PDF ファイル内の画像をダウンサンプリングする方法
基本的に、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
の最近のバージョン ユーティリティは -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 の解像度でレンダリングされます。
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
[email protected] 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 では、デフォルトでは使用されませんでした。)