PDFファイルのページを画像に変換したいと思ったことはありませんか?Pythonのpdf2imageを利用することで数行のコードを記述することで手元の環境で簡単にPDFのページを画像に変換することができます。

本文書での動作確認はmacOSで実行しています。

環境の構築

Python venvで仮想環境を作成してPythonライブラリのインストールを行います。

任意の場所で任意の名前のpython_from_pdf_to_imageディレクトリを作成します。作成したらそのディレクトリに移動します。


% mkdir python_from_pdf_to_image
% cd python_from_pdf_to_image

Python venvで仮想環境を作成するために”python3 -m venv env”コマンドを実行します。


% python3 -m venv env
% ls
env

仮想環境を有効化するためにmacOSではsource env/bin/activateを実行します。実行するとコマンドのプロンプトの前に(env)が表示されます。


 % python3 -m venv env
 % source env/bin/activate
(env) python_env % 

仮想環境は独立した環境なのでpip listコマンドを実行するとpipとsetuptoolsのみ表示され、パッケージとバージョンを確認することができます。


(env) % pip list
Package    Version
---------- -------
pip        23.3.1
setuptools 69.0.2

[notice] A new release of pip is available: 23.3.1 -> 24.0
[notice] To update, run: pip install --upgrade pip

必須ではありませんがnoticeでpipのアップグレードに関するメッセージが表示されているのでpipのアップグレードを行います。実行後に再度pip listを実行するとバージョンが上がっていることが確認できます。


(env) % pip install --upgrade pip
Requirement already satisfied: pip in ./env/lib/python3.11/site-packages (23.3.1)
Collecting pip
  Using cached pip-24.0-py3-none-any.whl.metadata (3.6 kB)
Using cached pip-24.0-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.3.1
    Uninstalling pip-23.3.1:
      Successfully uninstalled pip-23.3.1
Successfully installed pip-24.0
(env)  % pip list
Package    Version
---------- -------
pip        24.0
setuptools 69.0.2

PDFを画像に変換

PDFファイルを画像に変換するためにpdf2imageライブラリを利用しますが内部でPopplerを利用しているためPopplerのインストールも必要となります。PopplerはPDFの処理に関連するライブラリでPDFの表示、変換、レンダリングするためのフリーのライブラリです。

PopplerのインストールはHomebrewを利用してOS上にインストールを行います。


 % brew install poppler

Popplerのインストール後にpdf2imageライブラリのインストールを行います。こちらはPythonのライブラリなのでpip installコマンドを利用します。


 % pip install pdf2image

変換を行うための必要なライブラリのインストールは完了です。

画像変換コード

python_from_pdf_to_imageディレクトリ直下にmain.pyファイルを作成して以下のコードを記述します。インストールしたpdf2imageのconvert_from_path関数を利用します。ここではPDFファイルをjpgファイルに変換を行うのでconvert_from_pathのオプションfmtにはjpegを指定しています。sizeは出力サイズをwidth,heightを指定できます。1200, Noneを指定すると幅は1200pxで高さは元の画像のアスペクト比に基づいて計算された値となります。


from pdf2image import convert_from_path

def convert_pdf_to_images(pdf_path, output_folder):
    images = convert_from_path(pdf_path, fmt='jpeg',size=(1200, None))

    for i, image in enumerate(images):
        image.save(f'{output_folder}/{i}.jpg', 'JPEG')

convert_pdf_to_images('./sample.pdf', './output')

変換を行いたいpdfファイルはpython_from_pdf_to_imageディレクトリの下に保存します。ここではsample.pdfというPDFファイルから画像を作成します。変換した画像はoutputディレクトリに保存するのでoutputディレクトリを作成します。

mani.pyファイルを実行するとoutputディレクトリに0.jpg,….とPDFファイルの枚数分のファイルが作成されます。

[付録]Pillowでサムネイルを一括作成

pdf2imageライブラリをインストールすると画像処理ライブラリであるpillowも一緒にインストールされるのでpillowを利用することでPDFから作成した画像ファイルのサムネイルを作成するといったことも簡単にできます。

サムネイル画像を保存するディレクトリthumbnailsを作成します。convert.pyファイルを作成して以下の変換コードを記述します。outputディレクトリに存在する拡張子にjpgが付いたファイルを幅128pxでアスペクトrationを保持したままサイズを変換してthunbnailsディレクトリに保存します。


import os
from PIL import Image

for filename in os.listdir('output'):
    if filename.endswith('.jpg'):
        img = Image.open(os.path.join('output', filename))
        img.thumbnail((128,img.height))
        img.save(os.path.join('thumbnails', filename))

実行するとthumnailsディレクトリに指定したサイズでリサイズされたサムネイル画像が作成されます。