Pythonでpdf2imageを使用しPDFファイルを画像に変換する

Pythonでpdf2imageを使用しPDFファイルを画像に変換してみます。

なお、pdf2imageモジュール・ライブラリは、Pythonの標準ライブラリではありませんので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■pdf2imageをインストールする

pdf2imageをインストールを行いますが、今回はpipを経由してインストールを行うので、まずWindowsのコマンドプロンプトを起動します。

pip install pdf2image

起動後、上記のコマンドを入力し、Enterキーを押します。

なお、今回は、pythonランチャーを使用しており、Python Version 3.8.5にインストールを行うために、pipを使う場合にはコマンドでの切り替えを行います。

py -3.8 -m pip install pdf2image

切り替えるために、上記のコマンドを入力し、Enterキーを押します。

Defaulting to user installation because normal site-packages is not writeable
Collecting pdf2image
Downloading pdf2image-1.15.1-py3-none-any.whl (10 kB)
Requirement already satisfied: pillow in c:\users\user_\appdata\roaming\python\python38\site-packages (from pdf2image) (8.2.0)
Installing collected packages: pdf2image
Successfully installed pdf2image-1.15.1

Enterキーを押すと、インストールが開始され、上記のように「Successfully installed」と表示されます。これが表示されれば、pdf2imageが正常にインストールされたことになります。

なお、今回はpdf2imageのバージョン1.15.1をインストールしました。

■Windows用のpopplerをダウンロードする

インストール後、pdf2imageを使用するために、popplerをダウンロードします。ダウンロードはこちら(https://github.com/oschwartz10612/poppler-windows/releases/)です。

今回は、poppler-windowsのバージョン21.03.0を使用しますので、「release-21.03.0.zip」の文字をクリックします。

クリックすると、ダウンロードが開始されます。しばらくすると、Webブラウザで指定されている保存場所に、「release-21.03.0.zip」がダウンロードされますので、このファイルを展開・解凍します。

展開・解凍すると、「Release-21.03.0」というフォルダが生成されます。このフォルダを今回はわかりやすく「C:\」のディレクトリ内に移動しておきます。

移動後、「Release-21.03.0」というフォルダ内の「poppler-XX.XX.X(バージョン)」-「Library」-「bin」というフォルダに上記のファイルが入っていることを確認します。このフォルダに入っているファイルは、PDFファイルを画像に変換する際に使用します。

■PDFファイルを用意する

次にPDFファイルを画像に変換するために、PDFファイルを用意します。

今回はページ数が2ページある「test.pdf」というPDFファイルを用意しました。なお、このファイルが保存されている場所は「C:\Users\user_\test(フォルダパス)」です。

■pdf2imageを使用しPDFファイルを画像に変換する

移動後、pdf2imageを使用しPDFファイルを画像に変換するスクリプトを書いていきます。

■コード

from pdf2image import convert_from_path

images = convert_from_path(r'C:\Users\user_\test\test.pdf',poppler_path = r"C:\Release-21.03.0\poppler-21.03.0\Library\bin") 
for i in range(len(images)):
          images[i].save('img'+str(i)+'.jpg', 'JPEG')

pdf2imageのconvert_from_pathをインポートします。

その後、imagesという変数を作成し、その中でconvert_from_path()関数を使用します。convert_from_path()関数の括弧内の第1の引数には、画像に変換するPDFファイルを指定します。第2の引数には、先ほどダウンロードしたpopplerの「poppler-XX.XX.X(バージョン)」-「Library」-「bin」というフォルダを指定します。

これでPDFファイルを画像に変換できます。あとは、for文を使用し、PDFファイルのページ分を1つ1つの画像に変換し、今回はJPEG形式の画像ファイルとして保存します。ちなみに、JPEG形式以外にも、png形式などの画像として保存することもできます。

■実行

このスクリプトを「pdf_img_convert.py」という名前で保存し、コマンドプロンプトから実行してみます。

実行してみると、PDFファイルを画像として変換した結果をprint()関数を使用し出力することなどはしていないので、何も出力されません。

出力されていませんが、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)を確認すると、JPEG形式の画像ファイルが作成されていることが確認できます。

確認後、この2つのJPEG形式の画像ファイルを開いてみると、PDFファイルのデータが画像ファイルとして変換されていることが確認できました。

■convert_from_path()関数のpopplerのパスを引数として追加しない場合

convert_from_path()関数のpopplerのパスを引数として追加しない場合は、下記のエラーが発生します。

Traceback (most recent call last):
File “C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\pdf2image\pdf2image.py”, line 445, in pdfinfo_from_path
proc = Popen(command, env=env, stdout=PIPE, stderr=PIPE)
File “C:\Program Files\Python38\lib\subprocess.py”, line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File “C:\Program Files\Python38\lib\subprocess.py”, line 1307, in _execute_child
hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “pdf_img_convert.py”, line 3, in <module>
images = convert_from_path(r’C:\Users\user_\test\test.pdf’)
File “C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\pdf2image\pdf2image.py”, line 97, in convert_from_path
page_count = pdfinfo_from_path(pdf_path, userpw, poppler_path=poppler_path)[“Pages”]
File “C:\Users\user_\AppData\Roaming\Python\Python38\site-packages\pdf2image\pdf2image.py”, line 471, in pdfinfo_from_path
raise PDFInfoNotInstalledError(
pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?

コメント

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