表示範囲 (CropBox) を考慮して PDF のサムネイルをつくる

More than 5 years have passed since last update.

Automator や ImageMagick でも PDF を画像に変換することはできるが、表示範囲 (CropBox) が考慮されず、トンボや余白が画像に含まれてしまう場合がある。

Poppler という PDF レンダリングライブラリに含まれる pdftoppm コマンドなら -cropbox オプションで表示範囲のみを画像にすることができる。


Poppler のインストール

Homebrew を使っているなら、下記コマンドで完了。

$ brew install poppler

XQuartz のインストールを要求されたら、下記からダウンロード、インストールする。

https://xquartz.macosforge.org/landing/


pdftoppm の使い方

ヘルプは -h オプションで。

$ pdftoppm -h

下記コマンドで foo.pdf の 1 ページ目の表示範囲が foo.jpg に保存される。

# -cropsize  表示範囲を考慮

# -f 1 1 ページ目
# -jpeg jpeg で出力
$ pdftoppm -cropbox -f 1 -jpeg foo.pdf > foo.jpg


サムネイルに

pdftoppm-scale-to オプションでもサイズの変更は可能だが、あまり綺麗でなかったので ImageMagick の convert でリサイズする。

# jpeg:-         標準入力のデータを JPEG として読み込む

# -resize 96x96 96x96px に収まるサイズに縦横比を変えずリサイズ
$ pdftoppm -cropbox -f 1 -jpeg foo.pdf | convert jpeg:- -resize 96x96 foo.jpg


下記は、pdf ディレクトリにある PDF のサムネイルを作成し、thumbnail ディレクトリに保存する Ruby スクリプト。

require "shellwords"

Dir.glob("pdf/*.pdf") do |pdf|
puts pdf
dest = "thumbnail/" + File.basename(pdf).gsub(/\.pdf$/, ".jpg")
`pdftoppm -cropbox -f 1 -jpeg #{pdf.shellescape} | convert jpeg:- -resize 96x96 #{dest.shellescape}`
end