LoginSignup
64
46

More than 5 years have passed since last update.

PDF をコマンドラインから圧縮する

Last updated at Posted at 2018-11-30

概要

圧縮というか品質を GhostScript で調整してPDFのファイルサイズを削減する話です。

インターネット経由でPDFを共有するなら容量はなるべく小さい方がいい。膨らみがちなPDFのファイルサイズを小さくする方法はないかと PDF 圧縮 なんて検索すると Web サービスがいくつかヒットしますが、PDF の内容次第ではそのようなサービスを利用したくないこともあるでしょう。

そこで、なるべくローカルで完結させたい・コマンドラインで処理したいという要望に応えるべく、この記事では「GhostScript でPDFのファイルサイズを減らす方法」を紹介します。

Install GhostScript

GhostScript が必要なのでインストールしてください。

普段 TeX・LaTeX なんかを使っている人はすでに GhostScript がインストールされているかもしれません。 gs --version を実行してみてバージョン情報が返ってくるようであればすでに gs コマンドが利用可能なのでこの項目は飛ばしてください。

macOS

Homebrew でインストールできます。

brew install ghostscript
gs --version
# 9.26

その他OS

以下を参考にしてください。

Ubuntu 18.04 とかであれば sudo apt install ghostscript でインストール可能だと思いますが私は検証していません。あと環境次第ではコマンド名が gs ではなく ghostscript である場合もありそうです。

圧縮方法

実行するコマンド

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

input.pdf を入力にして output.pdf が得られます。

PDFSETTINGS は以下のものから選択できます。

  • /default
  • /screen
  • /ebook
  • /printer
  • /prepress

Shell function

次のような Shell 関数を定義しておくと便利です。

function pdfmin()
{
    local cnt=0
    for i in $@; do
        gs -sDEVICE=pdfwrite \
           -dCompatibilityLevel=1.4 \
           -dPDFSETTINGS=/ebook \
           -dNOPAUSE -dQUIET -dBATCH \
           -sOutputFile=${i%%.*}.min.pdf ${i} &
        (( (cnt += 1) % 4 == 0 )) && wait
    done
    wait && return 0
}

4 プロセスまでを同時実行できます。同時実行数の上限はお使いの環境に合わせて修正してください。 .bashrc などに書いておけば、次のようにして実行できます。

pdfmin *.pdf

*.min.pdf が生成され上書きはしません。

どの品質を選ぶべきか

以下のPDFに対してそれぞれの品質でコマンドを実行してみました。

for i in screen ebook printer prepress default; do
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/${i} -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output_${i}.pdf input.pdf
done
$ du -h *
3.9M    input.pdf
3.1M    output_default.pdf
2.1M    output_ebook.pdf
4.1M    output_prepress.pdf
4.1M    output_printer.pdf
2.1M    output_screen.pdf

この処理では 画像の品質の影響が大きい ので画像を多く含むPDFほどオプションごとに違いがでます。次に screenebook を指定した場合のそれぞれの実行結果を載せてみました。

screen の場合

screen.jpg

左が元のPDFで右が処理後のPDFです。画像の劣化が激しく、文字の判別ができなくなってしまいました。 screen は削減効果絶大ですがあまり実用的ではありません。

ebook の場合

ebook.jpg

左が元のPDFで右が処理後のPDFです。よく見ると画像の劣化が分かりますが screen の時ほどひどいものではありません。 ebook をオプションに指定するのがオススメです。

もし ebook も許容できない場合は default を指定してください。

参考サイト

64
46
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
46