PyMuPDFの基本的な使い方

PyMuPDFの基本的な使い方
スポンサーリンク
スポンサーリンク

Pythonでは外部ライブラリを使用することで、PDF操作を自動化することができます。
ここではPDF操作用ライブラリの一つであるPyMuPDFの使い方について解説します。

スポンサーリンク

ライブラリのインストール

ライブラリ :PyMuPDF(公式ドキュメント
インストール:必要

ライブラリを利用するには、pipコマンドでPyPDF2ライブラリをインストールします。
・関連記事:Pythonライブラリのインストール(pipの使い方)

python -m pip install pymupdf

Successfully installed ・・・・と表示されればインストールは成功です。(依存関係のある他のライブラリも同時にインストールされます。)

ライブラリのインポート

PyMuPDFライブラリを使用するには、fitzをインポートします。

ライブラリ名と違いますが、歴史的な理由によりこのように呼び出します。

PDFファイルを開く

ファイルを開くにはopen()メソッドを使用します。引数はファイルパスを指定します。

サンプルとして統計局の『高等学校における「情報II」のためのデータサイエンス・データ解析入門』の第1章テキストを使用します。(ファイル名は sample.pdf に変更)

 fitz.open(ファイルパス)

例としてsampel.pdfを開きます。

docにdocumentオブジェクトが格納されます。

PDFファイルを保存する

PDFファイルを保存するには、save()メソッドを使用します。引数は保存するファイルパスを指定します。

 Documentオブジェクト.save(ファイルパス)

読み込んだ doc オブジェクトをsample2.pdfとして保存します。

PDFファイルを上書き保存する

編集したPDFファイルを上書き保存するには、saveIncr()メソッドを使用します。引数は不要です。

 Documentオブジェクト.saveIncr()

documentオブジェクト doc を上書き保存します。

ページ数を取得する

PDFファイルのページ数を取得するには、Documentオブジェクトのpage_countプロパティを指定します。

 Documentオブジェクト.page_count

PDFのしおり(目次)情報を取得する

PDFファイルのしおりを取得するには、get_toc()メソッドを使用します。

 Documentオブジェクト.get_toc()

出力される形式は以下のようになります。レベルは階層を表しています。

[レベル, 見出しの名称, ページ番号]

サンプルとして統計局の『高等学校における「情報II」のためのデータサイエンス・データ解析入門』の第1章テキストのしおりを取得してみます。

[[1, ‘第1章’, 1],
 [2, ‘はじめに(社会における変化)’, 1],
 [2, ‘機械学習とデータ×AIの関係性’, 3],
 [2, ‘データとはなにか’, 13],
 [2, ‘AIの根幹となる技術・機械学習とは’, 19],
 [2, ‘AI最新技術の活用例’, 22]] 

ページを削除する

単一のページを削除する場合はdelete_page()メソッドを使用します。引数はページ番号です。このページ番号は1ページ目が0で、ページ数-1の数字になるので注意してください。

 Documentオブジェクト.delete_page(ページ番号)

5ページ目を削除する場合は以下のようになります。


複数ページを削除する場合は、delete_pages()メソッドを使用します。

Documentオブジェクト.delete_pages(開始ページ番号, 終了ページ番号)
もしくは
Documentオブジェクト.delete_pages(from_page=開始ページ番号, to_page=終了ページ番号)


1ページ目から5ページ目までを削除する場合は以下のようになります。


以下でも同じ結果となります。

ファイルを結合する

ファイルを結合するには、ファイルを挿入するinsert_pdf() メソッドを使用します。引数は結合したいドキュメントオブジェクトを指定すると、結合先のファイルの後ろに追加されます。

Docmentオブジェクト.insert_pdf(挿入するDocumentオブジェクト)

doc1の後ろにdoc2を結合(追加)します。


挿入するページの範囲、挿入位置を指定することもできます。

Documentオブジェクト.insert_pdf(
挿入するDocumentオブジェクト,
from_page =コピーしたいページの開始ページ番号,
to_page =コピーしたいページの終了ページ番号,
start_at =コピーを挿入するページ番号
)

 

ファイルを分割する

ファイルを分割するには、空のファイルに必要なページをコピーして別ファイルとして保存します。
ページをコピーするには insert_pdf() メソッドを使用します。

次の例は、「sample.pdf」の初め5ページと最後5ページを「split1.pdf」それ以外の部分を「split2.pdf」に分割して保存するプログラムです。

テキストデータを取得する

指定したページのテキストデータを取得するには、get_page_text() もしくは get_text() を使用します。

Documentオブジェクト.get_page_text(ページ番号)
もしくは
Documentオブジェクト[ページ番号].get_text()

1ページ目のテキストを取得します。

以下でも同じ結果になります。

全ページのテキストデータを取得する方法は以下の記事を御覧ください。
・参考記事:PythonでPDFのテキストを抽出する(PyMuPDF)

画像データを取得する

画像データを取得するためには、get_page_images()もしくはget_images()メソッドで画像情報のリストを取得してから、リスト内の画像オブジェクト番号を元にextract_image()メソッドで画像データを抽出する必要があります。

Documentオブジェクト.get_page_images(ページ番号)
もしくは
Documentオブジェクト[ページ番号].get_images()
Documentオブジェクト.extract_image(画像オブジェクト番号)

sample.pdf から1番目の画像を抽出してimage.png として保存するプログラムは以下になります。

詳細はこちらの記事で解説していますので参考にしてみてください。
・参考記事:PythonでPDFファイルの画像を抽出する(PyMuPDF)

PyMuPDFの基本的な使い方を解説しました。