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