複数のpdfファイルを一括で連番画像(フォルダは分ける)に変換する

作ったもの

プログラムで指定したディレクトリに存在するpdfファイル毎にフォルダを作成し、連番画像ファイルとして出力するプログラム。
なお、以下のページを参考に作成した(※)ので、詳細な説明は下記を参照。
gammasoft.jp/blog/convert-pdf-to-image-by-python/
(ほとんどそのままだが、複数のpdfファイルに対応させるよう修正した。)

作成した背景

pdfファイルにロゴを追加せよ、という指令が下った。その際に、以下の制約条件があった。

  • 画質はそこまでうるさく言わない
  • 元ファイル(word)が入手できない(探すのに時間がかかるため)
    そこでpdfファイルを一旦画像ファイル化して、ロゴを挿入した後画像をpdfに固めることとした。
    本プログラムは作ったもので説明した通り、pdfファイルを画像化するプログラムである。

使い方

①以下のページの手順を参考に、各種ライブラリのインストールおよびpopplerフォルダを作成する。
(下記参考ページのプロジェクトフォルダ構成までの手順を実施する。)
gammasoft.jp/blog/convert-pdf-to-image-by-python/

②以下のディレクトリ構成となるよう「png」「poppler」フォルダを作成し、「pdf2img.py」や処理対象となるpdfファイルを配置したうえで「pdf2img.py」を実行する。

  • ルートディレクトリ
    • pdf2img.py
    • poppler
    • png
    • ○○.pdf(処理対象となるpdfファイル)

③プログラムの処理が終了すると、pngフォルダ内にpdfファイルの「.pdf」を除いた部分の文字列のフォルダが生成され、そのフォルダ内に画像が出力される。

ソースコード(pdf2img.py)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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)

files=glob.glob("*.pdf")
print(files)
for i in files:
	# PDFファイルのパス
	pdf_path = i
	# PDF -> Image に変換(150dpi)
	pages = convert_from_path(Path(pdf_path), 300)
	new_path = "png/"+os.path.basename(pdf_path).split(".pdf")[0]
	if not os.path.exists(new_path):#ディレクトリがなかったら
		os.mkdir(new_path)#作成したいフォルダ名を作成
	# 画像ファイルを1ページずつ保存
	init_flag=0
	for j, page in enumerate(pages):
		file_name = new_path + "/{:02d}".format(j + 1) + ".png"
		page.save(file_name, "PNG")

コメント