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()
コメント