GNU/Linux >> Linux の 問題 >  >> Linux

PDF ファイルの最適化 (Ghostscript などを使用)

ここから取得した次のオプションで 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 では、デフォルトでは使用されませんでした。)


Linux
  1. レンジャーで特定のフォルダ内のファイルを並べ替えますか?

  2. rsyncを使用してファイルをバックアップします

  3. Linux で Densify を使用して PDF ファイルを圧縮する

  1. Linuxでgocryptfsを使用してファイルを暗号化する方法

  2. PDFファイルをgrepする方法は?

  3. ディレクトリ付きの猫ファイル?

  1. ディレクトリ内のファイルの名前を変更しますか?

  2. LinuxでZIPファイルを操作する

  3. PNG ファイルを再帰的に最適化する