pdfファイルに高解像度の画像を埋め込むと,ファイルサイズが無駄に大きくなります.この場合,以下のスクリプトで画像の解像度を下げると,効率よくファイルが圧縮できます.コマンドラインで実行できるので,複数のpdfファイルを一括で変換することも可能でとても便利です.
なおこのスクリプトは Linuxと Mac OS Xの両方で動作します
スクリプトの中身
#!/bin/bash error() { echo "$@" exit 1 } if [ $# -ne 2 ]; then cat<<EOF usage: $0 <input-pdf> <output-pdf> EOF exit 1 fi input=$1 output=$2 [ -f "$input" ] || error "no such input file, $input" [ -f "$output" ] && error "$output already exists" gs \ -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \ -dDownsampleColorImages=true \ -dColorImageResolution=300 \ -dNOPAUSE -dBATCH \ -sOutputFile="$output" "$input"
使い方
上記の内容をパスが通っているディレクトリ,例えば /usr/bin/以下に,pdf_reduce.sh という名前で保存します.次にパーミッションを設定します
$ sudo chmod a+x /usr/bin/pdf_reduce.sh
実行方法は以下の通りです.
$ pdf_reduce.sh original.pdf output.pdf
ここで,original.pdf は元のファイル , output.pdf が出力ファイルの名前になります.
複数のpdfを一括変換する場合は次のようにします
$ mkdir output $ for x in *.pdf; do pdf_reduce.sh $x output/$x; done
出力ファイルの保存先として "output"というディレクトリを作成して,カレントディレクトリにあるpdfをまとめて変換し,同じファイル名で outputディレクトリ以下に保存します.
解説
gsコマンドを使って pdf を読み込んで,再度pdf形式で書き出しています
ポイントは,以下の3点です
- 出力ファイルは pdf 形式 (-DEVICE=pdfwrite)
- 画像の解像度を下げるモードを有効にする(-dDownsampleColorImages=true)
- 出力時の解像度は 300dpi に設定( -dColorImageResolution=300)
A4の紙に印刷する程度であれば解像度は300dpi程度で十分です