February 11, 2022

[Python] PDF の中の画像データをオリジナルのまま一括抽出して保存する

event_noteFebruary 11, 2022

ここでは Windows で、Python 3 向けのPDF編集ツールである PyMuPDFを使って、PDF内の画像データをオリジナルのまま抽出する手順について見ていきます。この記事で使用している Python のバージョンは 3.10.2 Windows 64bit版 で、PyMuPDF のバージョンは 1.19.5 です。

必要となるプログラムの準備

Python 3 をインストール

まずは、以下から Python を入手してインストールします。

The official home of the Python Programming Language

インストールする際は、Add Python to PATHにチェックを入れてから、Install Nowを選択ください。

バッチファイルのダウンロード

コマンドプロンプトなどにコマンドを入力する手間を省くため、処理をある程度自動化するバッチファイルを作成しましたので以下よりダウンロードください。

PyMuPDF-batch.zipをダウンロードしたら、中にある2つの.batファイルを、任意のフォルダに配置してください。

PyMuPDF をインストール

先ほど配置した、Install-PyMuPDF.batをダブルクリックして実行ください。PyMuPDFのダウンロードとインストールが実行されます。Install-PyMuPDF.batの中には以下のようなコマンドが記載されています。

pip download PyMuPDF
pip install --upgrade --no-index --find-links=./ PyMuPDF
cmd

1行目のpip download PyMuPDFで、PyMuPDF のインストール用パッケージをダウンロードします。ダウンロードされるパッケージは、Python のバージョンや、使用しているパソコンのOS・CPUの種類に応じて自動選択されます。
2行目のpip install --upgrade --no-index --find-links=./ PyMuPDFで、ダウンロードした PyMuPDF のインストール用パッケージ を現在のディレクトリから探して、インストールします。

PyMuPDF のインストールに失敗した場合は...

以下のような画面が出れば、インストールは成功していますので、次の項目へ進んでください。

もしもエラーがでてインストール失敗となった場合は、PyMuPDF のバージョンを指定して、インストールする必要があるかもしれません。バッチファイルを右クリックし、編集からバッチファイルの中身の確認・書き換えが行えます。バッチファイルをテキストエディタ(メモ帳)で開いたら、中身を以下のように書き換えます。

pip download PyMuPDF==1.18.13
pip install --upgrade --no-index --find-links=./ PyMuPDF==1.18.13
cmd

変更を保存する場合は、ファイル上書き保存をすればOKです。
PyMuPDF==1.18.13部分にはインストールしたいPyMuPDFのバージョンを指定してください。入手可能なPyMuPDFのバージョンは以下から確認できます。

Python bindings for the PDF toolkit and renderer MuPDF

また、ダウンロードしたパッケージファイルを直接指定して、インストールすることもできます。コマンドプロンプトや、PowerShell などを開いて以下のように入力しEnterで実行します (文頭の > マークは入力する必要はありません)。

> pip install --upgrade "C:\hoge\PyMuPDF-1.18.13-cp39-cp39-win_amd64.whl"

"C:\hoge\PyMuPDF-1.18.13-cp39-cp39-win_amd64.whl"部分にはダウンロードしたパッケージファイルのパスを入力してください。パッケージファイルのパスを知りたい場合は、Shiftキーを押しながら、ファイルを右クリックすると出現するパスのコピーを選択することで、手軽にコピーすることができます。

PDF から画像ファイルを抽出

PyMuPDF_extract_images.bat の使い方

先ほど配置した、PyMuPDF_extract_images.batのファイルアイコンに、画像を抽出したいPDFファイルをドラッグ&ドロップすると.batファイルのあるディレクトリに、画像フォルダが生成されます。またPyMuPDF_extract_images.batへは、複数のPDFファイルをまとめて選択してドラッグ&ドロップすることが可能です。一括でPDFを処理したい場合などにご活用ください。

バッチファイルの中身は以下のようになっています。

@echo off
cd /d %~dp0
setlocal enabledelayedexpansion

if "%~f1" == "" (
echo batファイル のアイコンに .pdfファイル をドロップしてください
set /P input=
exit
)

set avoidparenthesis=%*
for %%f in (!avoidparenthesis!) do (
if "%%~xf" == ".pdf" (
echo %%~nxf を読み込み中...
mkdir "%%~nf"
python -m fitz extract "%%~f" -images -output "%%~nf"
) else ( echo %%~nxf は拡張子が .pdf でないためスキップされました )
echo;
)
echo 処理はすべて終了しました
set /P input=
cmd

python -m fitz extract "%%~f" -images -output "%%~nf"部分が、PyMuPDF を使って、画像を抽出するコマンドです。他のオプションを使ってPDFの処理を行いたい場合は、この行を書き換えて上書き保存すればOKです。

参考サイト

Python bindings for MuPDF's rendering library. Contribute to pymupdf/PyMuPDF development by creating an account on GitHub.