複数のpdfを一括で画像(JPEGやPNG)に変換する方法【Python】

ブログ
当サイトの記事には、アフィリエイトリンクを含むものがあります。
アフィリエイトリンクは、ユーザー(あなた)がリンク経由で商品を購入すると、広告主などからサイトの運営者(わたし)に報酬が支払われる仕組みです。ユーザー側(あなた)に金銭的な利益や損失は発生しません。
リンク先の商品はわたしが実際に「良い」と思ったものであり、当サイトの記事の内容は広告主からの影響を受けていません。
何かご不明な点がございましたら、お手数をおかけしますがContactページよりお知らせください。

  

pdf画像(PEGやPNG)ファイルに変換したいとき、ありますよね。

 

Adobeユーザーなら、Acrobatを使えば「pdfを書き出し」から変換できます。

301 Moved Permanently

しかし…!複数のpdfでそれをやるのは地味に面倒です。

そして、「Pythonでなんとかできないか…」と思ってネットで検索しても、なかなかドンピシャな記事が出てこなかったので、忘備録にこの記事を書きました。

GitHub

GitHubに以下で紹介するコードを公開しています。

GitHub - Yoshito924/pdf_to_image: pdfを一括でpngやjpegに変換するPythonのスクリプトです。
pdfを一括でpngやjpegに変換するPythonのスクリプトです。. Contribute to Yoshito924/pdf_to_image development by creating an account on GitHub.

お手元のPCにPythonと「pdf2image」が入っていれば、git cloneしてすぐ使えます。(多分)

具体的なやり方

「pdf2image」ライブラリをインストールする

Pythonでpdfを変換するためには「pdf2image」ライブラリが必要です。
pipでインストールします。

 pip install pdf2image

※Pythonの代表的な画像を処理するためのパッケージ 「pillow」も必要です。
しかし、無い場合は一緒にインストールしてくれるみたいです。

「poppler」をダウンロードする

pdf2imageを使うには「poppler」というコマンドラインツールが必要のようです。

そこで、最新バージョンの「poppler」のZipファイルをダウンロードしてください。

※僕はWindowsでしか試していません。

Zipファイルを解凍をする

ダウンロードが終わったら、Laplace7Zipなどを使ってZipファイルを解凍します。

そして、別途「poppler」という名前のフォルダを作ります。

この「poppler」の中に、解凍したZipファイルに入っている「bin」と「include」と「lib」と「share」をコピーして入れます。

プロジェクトフォルダを作る

そして、以下の構成のフォルダを作ります。

PdfToImage
     ├ image_file ←変換した画像ファイルが出力されるフォルダ
     ├ pdf_file ←変換したいpdfを入れるフォルダ
     ├ poppler ←ダウンロードしたpopplerの中身を入れるフォルダ
     │    ├ bin
     │    ├ include
     │    ├ lib
     │    └ share
     └ pdf_to_image.py ←Pythonの実行ファイル

最終的に「PdfToImage」フォルダの中身がこんな感じになるイメージです。↓

Pythonのプログラムを書く

色々な書き方があると思いますけど…僕はこんな感じで書きました。

import os
from pathlib import Path
from pdf2image import convert_from_path
import glob


# poppler/binを環境変数PATHに追加する
poppler_dir = Path(__file__).parent.absolute() / "poppler/bin"
os.environ["PATH"] += os.pathsep + str(poppler_dir)


# PDFファイルのパスを取得し順番に捌いていく
for x in glob.glob("./pdf_file/*.pdf"):
    pdf_path = Path(x)

    # pdfから画像に変換
    pages = convert_from_path(str(pdf_path), dpi=150)

    # 画像ファイルを1ページずつ保存
    image_dir = Path("./image_file")
    for i, page in enumerate(pages):
        file_name = f'{pdf_path.stem}_{i + 1}.png'
        image_path = f'{image_dir}/{file_name}'
        # PNGで保存
        page.save(str(image_path), "PNG")

これで変換したいpdfを「pdf_file」の中に入れた後に、pyファイルを実行するだけで一括で画像ファイルに変換できます。便利だ―!\(^o^)/

※このプログラムはPNGファイルに変換する用です。「png」を「jpeg」にすればJPEGに変換できます。
convert_from_path()関数の「dpi=○○」の数値で解像度を変更できます。

 

png」を「jpeg」どちらへも変換したい人で、プログラムを書き替えるのが面倒な人は、「png」用と「jpeg」用のプログラムをそれぞれ作るか、if文で条件分岐を書いてプログラムを実行時に選べるようにしても良いかもしれません。↓

import os
from pathlib import Path
from pdf2image import convert_from_path
import glob

# poppler/binを環境変数PATHに追加する
poppler_dir = Path(__file__).parent.absolute() / "poppler/bin"
os.environ["PATH"] += os.pathsep + str(poppler_dir)

# 変換したい拡張子の情報をinput関数で受け取る
file_extension = input('jpeg→「j」、png→「p」を入力してください。')

# 拡張子の条件分岐
if file_extension == 'j':
    file_extension_name = 'jpeg'
else:
    file_extension_name = 'png'

# PDFファイルのパスを取得し順番に捌いていく
for x in glob.glob("./pdf_file/*.pdf"):
    pdf_path = Path(x)

    # pdfから画像に変換
    pages = convert_from_path(str(pdf_path), dpi=150)

    # 画像ファイルを1ページずつ「image_file」に保存する。
    image_dir = Path("./image_file")

    for i, page in enumerate(pages):
        # ファイルネームを決定する。
        file_name = f'{pdf_path.stem}_{i + 1}.{file_extension_name}'
        image_path = f'{image_dir}/{file_name}'
        # PNGで保存
        page.save(image_path, file_extension_name)

 

ちなみに、こんな感じで「last_page=1」とすると各pdf1ぺージ目だけを画像に変換できます。

    pages = convert_from_path(str(pdf_path), dpi=150 , last_page=1)

このページを見ると、他にも色々な引数を設定できるみたいですね。

Reference — pdf2image latest documentation

参考にさせていただいたページ

PythonでPDFを画像ファイル(JPEG、PNG)に変換する方法 - ガンマソフト
今回はPDFを画像ファイル(JPEG、PNG)にPythonで変換する方法をご紹介します。 PDFを画像ファイルに変換するには、通常は有料のAdobe® Acrobat®などのソフトを...
Windowsの環境パスを通す(path)
Windowsで環境パスの通し方の解説。
Pythonで条件を満たすパスの一覧を再帰的に取得するglobの使い方 | note.nkmk.me
Pythonのglobモジュールを使うと、ワイルドカード*などの特殊文字を使って条件を満たすファイル・ディレクトリ(フォルダ)などのパスの一覧をリストやイテレータで取得できる。 glob --- Unix 形式のパス名のパター ...
PDFファイルの画像ファイルへの変換 - Qiita
###はじめにPDFから画像ファイルへの変換について調べたので、その備忘録として記載します。###参考PythonでPDFを画像ファイル(JPEG、PNG)に変換する方法Install の方法…
タイトルとURLをコピーしました