PDFからPNGへ変換

スキャナで生成されたPDFデータをPNGに変換したいと思った時。1ページ1ページを分離してそれぞれ1つの画像ファイルとして保存したい。

 

1.ImageMagickで

$ convert hoge.pdf hoge.png

一番単純。これは画質がガタ落ちになる。densityオプションで画質向上できるけど、上げれば上げるだけどんどんRAMを必要とする。高画質な状態で作業したい時には不向き。density上げすぎると死亡する。

$ convert -density 600 hoge.pdf hoge.png
zsh: abort (core dumped) convert -density 600 hoge.pdf hoge.png

 

2.pdfimagesで

$ pdfimages -png hoge.pdf hoge

結構時間かかるが画質を落とさず取り出せる。

ただしスキャナの設定によって、理想通りの動作にならないことも。pdfimagesはPDFに画像データが貼り付けられていたらそれを取り出す、という動作のため、スキャンデータが1枚の画像として取り扱われる場合には(ただの画像データを貼り付けただけのページが並ぶため)PDF→PNG変換のように見える。しかし一部を文字として認識したりすると、各ページは複数のパーツ画像と文字、のようなデータになるため、pdfimagesを使うと、そこにあるパーツ画像のみが取り出される。

 

3.xpdfで

xpdfはpdftopngというそのものズバリなコマンドを持っている。xpdfからフォークしたPopplerではpdftoppmがあるので、これで一度ppmで書き出してからpngにしても良いかも。

$ pdftopng -r 600 hoge.pdf hoge

画質を落としたくないという事でDPIを600に設定してみたが、サクサク処理が進んでいく。軽い。今まで知らなかったけどめちゃくちゃ良いじゃん。

 

まとめ

convert→何でもおk、ファイル種別も自動判別のお手軽仕様だが、今回の用途では画質に拘ると死ぬ

pdfimages→割と手軽に使えるが、PDFデータの状態によっては理想通りの動作にはならない

pdftopng(Popplerならpdftoppm)→今の所マズイところが見当たらない

 

いつか読もうと思ってた本だけどレビューはそんな評価高くなくて微妙な気持ちになってる(ならなぜこれのリンクを張るのだといのは置いといて)