PDF ファイルをいじれる十徳ナイフ的なプログラム
ドキュメント: https://ghostscript.readthedocs.io/en/latest/Use.html

PDF サイズを小さくしたい

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
   -dPDFSETTINGS=/printer \
   -dColorImageDownsampleType=/Bicubic -dColorImageResolution=200 \
   -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=200 \
   -dMonoImageDownsampleType=/Subsample -dMonoImageResolution=600 \
   -dColorImageDownsampleThreshold=1.5 \
   -dGrayImageDownsampleThreshold=1.5 \
   -dDownsampleColorImages=true \
   -dDownsampleGrayImages=true \
   -dEmbedAllFonts=true -dSubsetFonts=true \
   -dNOPAUSE -dBATCH -dQUIET \
   -sOutputFile=(出力ファイル).pdf \
    input1.pdf input2.pdf (……入力PDFを複数指定できる)
 
  • -dPDFSETTINGS=/printer はプリンタ品質で出力することを指定する。詳しくは 公式ドキュメント にあるが、ほかには screenebookprinterprepress が指定できる。
  • 画像解像度は printer のデフォルト値である 300dpi の代わりに 200dpi を指定している。(許容されるファイルサイズを満たす範囲で最大にするとよい)

🛠 オプション解説(なぜこれが「最強」なのか)

1. 基礎体力(安定性と静音性)

  • -dCompatibilityLevel=1.4: PDF 1.4(Acrobat 5 相当)に固定。透明グループの処理が安定し、ほぼすべてのデバイスで閲覧可能です。
  • -dQUIET: 処理中のログ出力を抑制します。エラー以外表示されないので、スクリプトに組み込んだ際に邪魔になりません。

2. 解像度の絶妙な調整(画質維持のキモ)

  • -dPDFSETTINGS=/printer: ベースを 300dpi(高品質)に設定し、ベクトルデータの劣化を防ぎます。
  • -d...ImageResolution=200:
    カラーとグレースケールの解像度を 200 dpi に明示的に設定。300(printer 標準)だと重すぎ、150(ebook 標準)だと論文の細かい図が潰れることがありますが、200 は「画面で拡大しても綺麗、印刷しても耐える」絶妙なラインです。
  • -dMonoImageResolution=600: 白黒(二値)画像は文字や図面に多いため、ここは高めの 600dpi を維持して視認性を確保します。

3. 無駄な間引きを抑える(インテリジェント縮小)

  • -d...ImageDownsampleThreshold=1.5:
    「設定した解像度 (200) の 1.5 倍(=300dpi)を超える画像」だけを圧縮対象にします。元から 250dpi くらいの適正な画像は、再圧縮による劣化(アーティファクト)を避けるためにあえてスルーします。

4. フォントと安全性の両立

  • -dEmbedAllFonts=true: フォントを全部埋め込みます。
  • -dSubsetFonts=true: これが重要です。 埋め込む際、その文書で「使っている文字」だけを抽出して埋め込むため、フォント全体のデータを抱え込まず、劇的にサイズが減ります。

PDF/A にしたい

フォントのサブセット化(軽量化)と色プロファイルの指定を組み込んだ、コピペ可能な決定版です。

Bash

gs -dPDFA=3 \
   -dBATCH -dNOPAUSE -dQUIET \
   -sDEVICE=pdfwrite \
   -dPDFACompatibilityPolicy=3 \
   -sColorConversionStrategy=RGB \
   -dEmbedAllFonts=true -dSubsetFonts=true \
   -sOutputFile=output_archive.pdf \
   input1.pdf input2.pdf

各オプションのまとめ(コピペ用解説)

オプション役割
-dPDFA=3長期保存用規格(PDF/A-3)を有効化。
-dPDFACompatibilityPolicy=3規格非適合な要素を自動的に適合化(エラー防止)。
-sColorConversionStrategy=RGB色空間を RGB に統一して標準化。
-dEmbedAllFonts=true表示の再現性を担保するため、全フォントをファイルに内包。
-dSubsetFonts=true使用している文字データのみを埋め込み、ファイルサイズを削減。
-dNOPAUSE -dBATCH処理を途中で止めず、完了後に自動終了する。
-dQUIET余計なログを表示せず、処理をクリーンに行う。

TIP

もし出力された PDF が「PDF/A になっていない」と警告が出る場合は、使用している Ghostscript のバージョンを確認してください。最近のバージョン(9.50 以降)であれば、上記の設定で非常に高い互換性を維持できます。