PythonでPDFから画像ファイルに変換

仕事上で大量のPDFファイルを画像化しなければならないことがあったので、その時の備忘録として^^;

参考にしたサイトはコチラ。

環境は、Python 3.7.4

まずモジュールでpdf2imageを使うので、pipとかでインストールしておきます。

pip install pdf2image

次に、Popplerというツールをダウンロードします。

バージョンはどれでもいいと思いますが、一番新しい"Latest binary"バージョンのものを適当な場所にダウンロードし、解凍します。

ソースコードはこちらです。

# coding: utf-8
import os
from pathlib import Path
from pdf2image import convert_from_path
#poppler/binを環境変数PATHに一時的に追加する
poppler_dir = Path(__file__).parent.absolute() / "poppler/bin"
os.environ["PATH"] += os.pathsep + str(poppler_dir)
#作業パス(出力先や読み込み元など)
pdf_path = Path(__file__).parent.absolute()
save_path = str(pdf_path) + r"\out"
pdf_path = str(pdf_path) + r"\qa_case.pdf"
#変換(300は300dpi)
pages = convert_from_path(pdf_path, 300)
#画像ファイルを1ページずつ保存
for i, page in enumerate(pages):
    image_path = save_path + r"\image_" + str(i) + ".jpg"
#JPEGで保存
    page.save(str(image_path), "JPEG")

今回画像化するPDFファイルは、総務相の"マイナンバーの提供を求められるケース"というカラー2枚のPDFです。

フォルダ構成はこの通りです。

workspace/
├── out/
├── poppler/
├── main.py
├── qa_case.pdf

main.pyと同じディレクトリに回答したpopplerフォルダを置きます。また、出力先のフォルダとしてoutというフォルダも作っておきます。

main.pyを実行します。

パスの入力ミス等なければ無事終了します。

上のコードでは300dpiで出力していますが、デフォルトだと200dpiでの出力となり少し早くなります。

実行後、outの中身には2枚のjpg画像が出力されています。

300dpiなので、フォントにジャギ等なくこれでいろいろ利用するのに支障はなさそうです^^