[Ghostscript] PDFを圧縮する

やりたいこと

昨今、PDFのファイルサイズを小さくする様々なオンラインサービスがあります。

しかし、個人情報の含まれるPDFだったりを小さくしたい場合、オンライン上にファイルをアップロードするのには抵抗があります。

なので、オフラインでPDFファイルサイズを縮小できる方法を探すと、Ghostscriptを使うとできそうなことが分かったので試してみました。

環境

以下の環境で実施しました。

  • Windows 10
  • WSL2 Ubuntu-20.04

手順

Ghostscriptをインストール

WSL2上のUbuntuにGhostscriptをインストールします。

$ sudo apt install ghostscript

Ghostscript 9.50がインストールされました。

$ gs --version
9.50

PDFのファイルサイズを小さくする

いよいよファイルサイズを縮小します。以下のコマンドでファイルサイズを小さくできます。

$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=<出力先のファイルパス> <小さくしたいPDFのファイルパス>

試しにこちらの3.9Mあるinput.pdfというPDFのファイルサイズの縮小を試みてみます。

$ ls -lh input.pdf 
-rwxr-xr-x 1 user user 3.9M Sep 17 02:15 input.pdf

縮小実行

$ gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

2.5kまでファイルサイズを圧縮できました。

$ ls -lh output.pdf 
-rw-r--r-- 1 user user 2.5K Sep 17 02:20 output.pdf

コマンドの解説

オプション説明
-sDEVICE=pdfwritePDF形式で出力します。
-dCompatibilityLevel=1.4PDFのバージョンを指定します。
-dPDFSETTINGS=/ebookPDFの解像度を指定します。
以下4つの値を指定できて、下に行くほど品質が高くなります。
・/screen
・/ebook
・/printer
・/prepress

指定しない場合は次の値を指定したときと同じ挙動になります。
・/default

なお、入力したPDFから品質をなるべく落としたくない場合は、/prepressではなく/defaultを使用するべきらしいです。
-dNOPAUSE各ファイルを処理するたびに一時停止しないようになります。
-dQUIET標準出力への出力を抑制します。
-dBATCH対話形式に入るのではなく、コマンド実行完了後に処理を終了します。
-sOutputFile=<出力先のファイルパス>縮小後のPDFの出力先のファイルパスを指定します。

参考:

PDFのファイルサイズをGhostscriptのコマンドで小さくする - Qiita
大きいファイルサイズのPDFはEメールに添付して送付すると、メールサーバーで弾き返され、送付できないことがある。そのような場合は、PDFの画像の解像度を落としてファイルサイズを小さくするGhosts…
High Level Output Devices
Details of Ghostscript Output Devices
How to Use Ghostscript

コメント