フリー (「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.pdf
。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 では、デフォルトでは使用されませんでした。)