PDF をページごとの画像ファイルに変換したくて、はじめは Python でできないか調べてた。そしたら↓のページで pdf2image という(Pythonの)ライブラリを紹介しているのを見つけた。
ところが記事を読んでみるとこう書いてある:
pdf2imageは「Poppler」というフリーのPDFコマンドラインツールを背後で用います。そのため、Popplerをダウンロードしておく必要があります。
それなら Poppler をそのまま使えばいいじゃん。
というわけで、Poppler for Windows をダウンロードした。
バージョンは 0.68.0 (poppler-0.68.0_x86.7z)。7zip なので 7z コマンドをインストールしてから展開した。
展開したファイルを眺めてみると、bin フォルダの中に pdfimages.exe という実行ファイルがある。これが使えそうだ。PATH を通してとりあえずヘルプを見てみた。
takatoh@montana: tmp > pdfimages -h pdfimages version 0.68.0 Copyright 2005-2018 The Poppler Developers - http://poppler.freedesktop.org Copyright 1996-2011 Glyph & Cog, LLC Usage: pdfimages [options] <PDF-file> <image-root> -f <int> : first page to convert -l <int> : last page to convert -png : change the default output format to PNG -tiff : change the default output format to TIFF -j : write JPEG images as JPEG files -jp2 : write JPEG2000 images as JP2 files -jbig2 : write JBIG2 images as JBIG2 files -ccitt : write CCITT images as CCITT files -all : equivalent to -png -tiff -j -jp2 -jbig2 -ccitt -list : print list of images instead of saving -opw <string> : owner password (for encrypted files) -upw <string> : user password (for encrypted files) -p : include page numbers in output file names -q : don't print any messages or errors -v : print copyright and version info -h : print usage information -help : print usage information --help : print usage information -? : print usage information
出力は JPEG が欲しかったので -j
オプションを指定。<image-root>
が何を指すのかよくわからないけどテキトーに。そしたらこうなった。
takatoh@montana: tmp > pdfimages -j sample.pdf foo
takatoh@montana: tmp > ls
Directory: C:\Users\takatoh\Documents\tmp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2020/10/24 8:53 5364971 foo-000.ppm
-a--- 2020/10/24 8:53 5364971 foo-001.ppm
-a--- 2020/10/24 8:53 5364971 foo-002.ppm
-a--- 2020/10/24 8:53 5364971 foo-003.ppm
-a--- 2020/10/24 8:53 5364971 foo-004.ppm
-a--- 2020/10/24 8:53 5364971 foo-005.ppm
-a--- 2020/10/24 8:53 5364971 foo-006.ppm
-a--- 2020/10/24 8:53 5364971 foo-007.ppm
-a--- 2020/03/28 9:12 4082441 sample.pdf
.ppm
って!いまどき .ppm
ファイルなんて何で見ればいいんだ。なら PNG でいいや。あと、<image-root>
は出力ファイルのプレフィックスみたいだな。なので .ppm
ファイルは削除してやり直した。
takatoh@montana: tmp > pdfimages -png sample.pdf sample
takatoh@montana: tmp > ls
Directory: C:\Users\takatoh\Documents\tmp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2020/03/28 9:12 4082441 sample.pdf
-a--- 2020/10/24 9:01 1269290 sample-000.png
-a--- 2020/10/24 9:01 446405 sample-001.png
-a--- 2020/10/24 9:01 893712 sample-002.png
-a--- 2020/10/24 9:01 1258104 sample-003.png
-a--- 2020/10/24 9:01 1301072 sample-004.png
-a--- 2020/10/24 9:01 1344592 sample-005.png
-a--- 2020/10/24 9:01 1157016 sample-006.png
-a--- 2020/10/24 9:01 755768 sample-007.png
これで OK。だけど、欲を言えば出力されるファイルをひとつのフォルダに入れたい。それらしいオプションは見当たらないけど、プレフィックスにパスを含めてやればできた。フォルダは先に作っておくこと。
takatoh@montana: tmp > mkdir outDirectory: C:\Users\takatoh\Documents\tmp
Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 2020/10/24 11:29 out takatoh@montana: tmp > pdfimages -png sample.pdf out/sample takatoh@montana: tmp > ls outDirectory: C:\Users\takatoh\Documents\tmp\out
Mode LastWriteTime Length Name ---- ------------- ------ ---- -a--- 2020/10/24 11:29 1269290 sample-000.png -a--- 2020/10/24 11:29 446405 sample-001.png -a--- 2020/10/24 11:29 893712 sample-002.png -a--- 2020/10/24 11:29 1258104 sample-003.png -a--- 2020/10/24 11:29 1301072 sample-004.png -a--- 2020/10/24 11:29 1344592 sample-005.png -a--- 2020/10/24 11:29 1157016 sample-006.png -a--- 2020/10/24 11:29 755768 sample-007.png
できた。
補足。
-j
オプションの説明は write JPEG images as JPEG files となっている。PDFの中身が JPEG なら JPEG で出力するってことのようだ。