[Python]PDFファイルをページ毎にpngへ変換する

PDFファイル内の文章を光学式文字認識(OCR)にかけてみようと思い、その前準備として、
PDFファイルの内容を一括で画像ファイルに変換するコードを書いたときの話です。

Python3.7で確認しました。
pdf2imageというパッケージを使用しています。

やろうとしたこと

  • inputディレクトリ配下にある複数のPDFファイルについて、以下のことを行う。
    • 1ページずつpngファイルに変換する
    • 出力結果はoutputディレクトリ配下に格納する

詳細はサンプルコードを参照ください。

やっていないこと

  • エラーハンドリング
    例えば、inputディレクトリやファイルがない、読み込めない、保存できないなど
  • 出力画像はpngのみでそれ以外は考慮しない

サンプルコード

import os.path
import glob
from pdf2image import convert_from_path

output_image_dir = "output_dir"
input_pdf_dir = "input_dir"
input_file_name = "sample_*.pdf"
param_dpi = 200 # 出力解像度

# 画像出力用ディレクトリの確認と生成(ディレクトリが存在しなければ、生成する)
def output_setting():
    if not os.path.exists(output_image_dir):
        os.makedirs(output_image_dir)

# PDFを画像に変換
def exchange_pdf_to_image(pdf_file_name):
    images = convert_from_path(pdf_file_name, dpi=param_dpi)
    output_setting()
    name, ext = os.path.splitext(os.path.basename(pdf_file_name))
    for index, image in enumerate(images):
        # sample.pdf の場合、sample_400_0.pngと出力する
        split_image_name = output_image_dir + '/' + name + '_' + str(param_dpi) + '_' + str(index) + '.png'
        image.save(split_image_name, 'png')
    return images

# PDFファイルが格納されたディレクトリからPDFリストを抽出して、各ファイルを変換関数に渡す
def exchange_pdf_list_to_images():
    pdf_list = glob.glob(input_pdf_dir + "/" + input_file_name)
    for file_name in pdf_list:
        exchange_pdf_to_image(file_name)

if __name__ == "__main__":
    exchange_pdf_list_to_images()

コメント

タイトルとURLをコピーしました