読者です 読者をやめる 読者になる 読者になる

どせいたんさき。

ナスダヨー

PDF のサイズを減らせるかもしれない Tips

目的

pdfcrop などでサイズを調整した PDF ファイルが元のファイルに比べて異様にサイズが大きくなっていることがある.また, Google Chrome から印刷して作成した PDF ファイルはほとんどテキストなのにやたらとサイズが大きかったりする.アップロードしたりメールに添付するときにあまりよろしくないので PDF ファイルのダイエットをしたい.

解決方法 (pdfopt を使用する)

ghostscript パッケージにて pdfopt というコマンドが提供されているらしい

NAME
pdfopt - Ghostscript PDF Optimizer

SYNOPSIS
pdfopt [ options ] input.pdf output.pdf

DESCRIPTION
pdfopt uses gs(1) to convert the Adobe Portable Document Format (PDF) file "input.pdf" to a so-called optimized form in "output.pdf". Optimization puts the elements of the file into a more linear order and adds "hint" pointers, allowing Adobe's Acrobat(TM) products to display individual pages of the file more quickly when accessing the file through a network.

Ubuntu Manpage: pdfopt - Ghostscript PDF Optimizer
$ man pdfopt
No manual entry for pdfopt

$ sudo apt-cache search pdfopt
(むなしい空白)

Ubuntu 14.04 (x86_64) にはないらしい.

解決方法 (ghostscript をつかう)

gs に PDF を食べさせて PDF を吐かせるとサイズが減ることがあるようだ.

$ gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=out.pdf -f in.pdf

そもそも gs で作成された PDF ファイルだと最適化はされないが,別のエンジンで作られた PDF ファイルだと最適化されてサイズが減ることもある.

bash の起動スクリプトに以下のようなものを追加した.

# NAME:
#     pdfopt: PDF のサイズを gs で最適化するためのスクリプト
# USAGE:
#     pdfopt in.pdf out.pdf
# NOTE:
#     in.pdf と out.pdf が同じ場合ファイルが壊れるかも
#
pdfopt() {
  gs -sDEVICE=pdfwrite -dBATCH -dNOPAUSE -sOutputFile=$2 -f $1
}

Google Chrome で印刷した PDF (2MB) を pdfcrop でトリミングしたファイル (13MB) にこのコマンドをかけたら 300 kB 程度になった.なお LibreOfficeinkscape から生成した PDF ファイルではこのコマンドを利用してもサイズは変わらなかった(内部的に gs を利用している?).やたらと PDF ファイルのサイズが大きかったときには試してみてもいいかもしれない.