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はプリンタ品質で出力することを指定する。詳しくは 公式ドキュメント にあるが、ほかにはscreen、ebook、printer、prepressが指定できる。- 画像解像度は
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 以降)であれば、上記の設定で非常に高い互換性を維持できます。