【Pythonで自動化】PyMuPDFでPDFファイル操作を自動化(1) PyMuPDFの基本的な使い方

PDFファイルの操作をPythonで自動化する方法を紹介します。

PythonでPDFファイルを操作するためのモジュールはいくつかありますが、今回は最も使い方が簡単(多分)なPyMuPDFの使い方を紹介します。

PyMuPDFは、PDFファイルの修正や結合、文章や画像の抜き出しなど基本的な操作が一通りできます。

PDF操作を自動化したいシーンは少ないかもしれませんが、いつか役に立つかもしれません。

スポンサーリンク

PyMuPDFのインストールとインポート

インストール

PymMuPDFはpip経由でインストールします。

pip install PyMuPDF

PyMuPDFのインポート

PyMuPDFを使うためにライブラリをインポートしますが、ライブラリの名前はPyMuPDFではなく、fitzに変わります。

import fitz

Anacondaで環境構築をしている人はconda経由でインストールしたほうが良いかもしれませんが、私の場合、conda経由でインストールすることはできませんでした(理由は不明)。

スポンサーリンク

PyMuPDFの基本的な使い方

PDFファイルに関する操作を自動化するために、必要な操作を覚えましょう。

PyMuPDFでPDFを開いてページにアクセスする、テキストを取得するといった超基本的な使い方を解説します。キーワード検索や画像の取得などは別の機会に紹介します。

PyMuPDFでPDFファイルを開く

PDFファイルをPyMuPDFで開くには、open()を使います。引数にはファイルのパス(場所)を渡すだけです。もし引数に何も指定しないと、新しいPDFを作成するという意味になります。

変数 = fitz.open(ファイルパス)

変数には、fitzのDocumentオブジェクトが格納されます。

PDFファイルを開いたら、Documentオブジェクトのclose()を使って閉じましょう。なお、ファイルを開いている状態か確認するには、is_closedを使います

#PDFファイル名を指定
filename = "test.pdf"

#PDFファイルを開く
file = fitz.open(filename)
print(file.is_closed)
#=>False
file.close()

print(file.is_closed)
#=>True

close()を忘れてしまうよ!という方は、以下のようにしてPDFファイルを開くといいでしょう。Pythonのopenと同じお作法です。

with fiz.open(filename) as f:
    #処理を行う
    print(f)

PDFファイルのページ数を調べる

ページ数をカウントするには、Documentオブジェクトのpage_countを使います。

Documentオブジェクト.page_count
num_pages = file.page_count
スポンサーリンク

PDFファイルのしおり(目次)を取得する

PDFファイルにしおり(目次)が設定されている場合は、get_toc()を使うことで目次を取得することができます。

Documentオブジェクト.get_toc()
file.get_toc()

例えば、無料で配布されているProGitマニュアルのPDFファイルから目次を取得したとしましょう。そうすると以下のような形式で表示されるはずです。

[[1, 'Cover', 1], 
 [1, 'Scott Chaconによる序文', 3], 
 [1, 'Ben Straubによる序文', 5], 
 [1, '謝辞', 7], 
 [1, 'コントリビューターの皆さん', 9], 
 [1, '前書き', 13], 
 [1, 'Table of Contents', 17], 
 [1, 'Chapter 1. 使い始める', 29], 
 [2, 'バージョン管理に関して', 29], 
 [3, 'ローカル・バージョン管理システム', 30], 
 [3, '集中バージョン管理システム', 31], 
 [3, '分散バージョン管理システム', 32], 
 [2, 'Git略史', 34], [2, 'Gitの基本', 34],...

目次に表示される形式は以下の通りです。

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

レベルは階層を表しており、1は1階層目、2ならば2階層を表しています。論文のように章・節で表すと、1が章2が節に対応します。

ページ番号は見出しがあるページを示しています。

ページにアクセスしてテキストを取得する

特定のページにアクセス

ページにアクセスしたいときは、load_page()を使い引数にページ番号を指定します。ページ番号は0始まりであることに注意してください。

変数 = Documentオブジェクト.load_page(ページ番号)

load_page()を使うと、変数にはPageオブジェクトが格納されます。

テキストを取得するには、DocumentオブジェクトgetPageText()を使うか、のpageオブジェクトのget_text()を使います。

Documentオブジェクト.getPageText(ページ番号, output="text")

outputは省略可能です。また、outputにはhtml、json、xmlを設定することが可能です。

Pageオブジェクト.get_text(output="text")

#5ページ目にアクセスする
page =file.load_page(4)
#または、以下のようにしても良い
page = file[4]

#5ページ目のテキストを取得する
text = page.get_text()

print(text)

また、ページにアクセスするためには、file[4]のようにDocumentオブジェクトに直接ページ番号を指定してもOK です。


● すべてのページにアクセス

すべてのページに対して何らかの処理を行いたい場合は、繰り返し処理(for文)を使います

for page in pdf_file:
    print(page.number)
#=>0 
#=>1
#=>2




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