無料でPDFファイルサイズを小さくする方法
目的
PDF書類のファイルサイズを、無料で、できるだけ可読性を保ったまま、小さくしたい。
方法
ghostscriptを利用する。ghostscriptは(\LaTeX)でおなじみだと思われる。知らない方は、Mac OSであれば、Homebrewでインストールできる。
% brew install ghostscript
Unixの方はもともと入っている(?)のだろうか。 Windowsの方はGhostscript: Ghostscript, GhostPCL, GhostXPS and MuPDF Downloadsからダウンロードできる。
サンプルコード
.bash_profile
に以下を記述する。
# Usage: cpdf [input file] [output file] [dpi] [Gray*|CMYK|RGB] [screen*|ebook|printer|prepress|default] cpdf() { gs -q -sOutputFile=${2:-"output.pdf"} -sDEVICE=pdfwrite \ -dNOPAUSE -dBATCH -dSAFER -dQUIET \ -dCompatibilityLevel=1.4 -dPDFSETTINGS=/${5:-"screen"} \ -dEmbedAllFonts=true -dSubsetFonts=true \ -sColorConversionStrategy=${4:-"Gray"} -dProcessColorModel=/Device${4:-"Gray"} \ -dGrayImageDownsampleType=/Bicubic -dGrayImageResolution=${3:-"100"} \ -dMonoImageDownsampleType=/Bicubic -dMonoImageResolution=${3:-"100"} \ -dColorImageDownsampleType=/Bicubic -dColorImageResolution=${3:-"100"} \ $1 < /dev/null }
これを書くことで、コンソール上で
% cpdf [圧縮したいPDFファイル名]
という使い方ができる。
cpdf
は、引数順に、
cpdf [入力ファイル名*] [出力ファイル名] [dpi値] [カラースケール] [プリセット]
を設定できる。
入力ファイル名のみは必須である。入力ファイル名以外を指定しない場合、出力ファイル名はoutput.pdf
、dpi値は100
、カラースケールはグレイスケール、プリセットはscreen
になる。
例えば、入力ファイルinput.pdf
を出力ファイルout.pdf
として、dpi=50
、カラースケールをCMYK
で生成したい場合は、
cpdf input.pdf out.pdf 50 CMYK
となる。(dpi=50だとかなり荒い)
補足
もちろん、gs
コマンドを直接コンソールで書いてもOKだが、オプションが多いため、煩雑になる。bashを利用するか、シェルスクリプトを書いて実行したほうが良い。
gsコマンド(執筆途中)
ghostscriptはgs
コマンドで実行する。
% gs [オプション] [入力ファイル名]
オプションは沢山あり、全てを説明すると膨大な量になる。ここではPDF書類の圧縮に関連する一部を紹介する。
オプション | 意味 | 値 | デフォルト値 |
---|---|---|---|
-sOutputFile |
出力ファイル名 | - | output.pdf |
-sDEVICE |
出力デバイスの選択 | gs -h で一覧を見れる |
- |
-dNOPAUSE |
各ページの処理の一時停止を無効にする | ||
-dBATCH |
インタラクティブなループコマンドに入った後に終了する | ||
-dSAFER |
deletefileとrenamefileオペレータを無効にし、パイプで連結されたコマンド(%パイプ%)を無効にする | ||
-dQUIET |
標準出力へのルーチン情報のコメントを非表示にする | ||
-dPDFSETTINGS |
定義済みのプリセットから1つを選ぶ | /screen , /ebook , /printer , /prepress , /default |
/default |
-sColorConversionStrategy |
色の定義 | Gray , CMYK , RGB |
|
-dProcessColorModel |
色の定義 | /DeviceGray , /DeviceCMYK , /DeviceRGB |
|
-dCompatibilityLevel |
1.3, 1.4, 1.5, 1.6 | 1.4 | |
-dEmbedAllFonts |
true or faluse |
true |
|
-dColorImageDownsampleType |
/Subsample , /Average , /Bicubic |
/Subsample |
|
-dColorImageResolution |
dpi | 100 | 72 |
-dGrayImageDownsampleType |
/Subsample , /Average , /Bicubic |
/Subsample |
|
-dGrayImageResolution |
dpi | 100 | 72 |
-dMonoImageDownsampleType |
/Subsample , /Average , /Bicubic |
/Subsample |
|
-dMonoImageResolution |
dpi | 100 | 72 |
-dSubsetFonts |
true or faluse |
true |
他にも多くのオプションがある。詳しくは/usr/local/share/ghostscript/doc/
を参照されたい。ここではPDF書類のファイルサイズを小さくすることに関連しているオプションのみを取り上げている。
英語ばかりで良くわからないかもしれないが、重要なのは、-dGrayImageResolution
で、この数値で解像度が決定されることだ。
dpiは数値が大きいほどきれいなPDFになる。小さいほど荒い。 つまり、ファイルサイズを小さくしたかったら、dpiを小さく設定すると良い。
実は、-dPDFSETTINGS=/screen
はデフォルトで72dpiに設定される。これはかなり荒く、可読性が保たれていない例が多い。筆者の推奨は100dpi程度である。