Python での PDF Handling に Fitz (PyMuPDF) を使う方法
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Fitz(別名 PyMuPDF)は、PDF ドキュメントを扱うための強力な Python ライブラリです。これにより、PDF ファイルを簡単に開き、操作し、情報を抽出できます。この記事では、Python で Fitz を使用する方法を、実践的な例を交えて説明します。
Key Takeaways
- Fitz (PyMuPDF) は、Python での PDF 操作を簡素化し、テキスト抽出、結合、編集などを可能にします。
- このライブラリは、PDF ドキュメントから画像やメタデータを抽出するための直感的なメソッドを提供します。
- Fitz を使用すると、最小限のコードで PDF の修正と作成が可能です。
インストール
Fitz を使用する前に、PyMuPDF ライブラリがインストールされていることを確認してください。
pip install pymupdf
ライブラリのインポート
まず、ライブラリをインポートします。
import fitz # PyMuPDF
PDF ドキュメントを開く
PDF ファイルを開くには、fitz.open()
関数を使用します。
pdf_document = fitz.open('example.pdf')
ドキュメント情報の取得
ドキュメントからさまざまなメタデータを取得できます。
# ページ数 num_pages = pdf_document.page_count print(f'ドキュメントには {num_pages} ページあります。') # メタデータ metadata = pdf_document.metadata print('メタデータ:', metadata)
ページからのテキスト抽出
特定のページからテキストを抽出するには:
# 特定のページをロード (0 から始まるインデックス) page_number = 0 page = pdf_document.load_page(page_number) # テキストを抽出 text = page.get_text() print(f'ページ {page_number + 1} のテキスト:\n{text}')
すべてのページからテキストを抽出するには:
for page_num in range(pdf_document.page_count): page = pdf_document.load_page(page_num) text = page.get_text() print(f'ページ {page_num + 1} のテキスト:\n{text}')
ページからの画像の抽出
特定のページから画像を抽出するには:
# ページをロード page = pdf_document.load_page(page_number) # ページの画像を取得 image_list = page.get_images(full=True) print(f'ページ {page_number + 1} に {len(image_list)} 個の画像が見つかりました。') # 各画像を処理 for img_index, img in enumerate(image_list, start=1): xref = img[0] base_image = pdf_document.extract_image(xref) image_bytes = base_image["image"] # 画像を保存 with open(f'image_page{page_number + 1}_{img_index}.png', 'wb') as image_file: image_file.write(image_bytes)
ページへのテキストの追加
特定のページにテキストを追加するには:
# ページをロード page = pdf_document.load_page(page_number) # テキストと位置を定義 text = "Hello, PyMuPDF!" position = fitz.Point(100, 100) # ページにテキストを追加 page.insert_text(position, text, fontsize=12, color=(0, 0, 0)) # 変更を保存 pdf_document.save('modified_example.pdf')
PDF ドキュメントの結合
2 つの PDF ドキュメントを結合するには:
# ドキュメントを開く pdf1 = fitz.open('document1.pdf') pdf2 = fitz.open('document2.pdf') # pdf2 を pdf1 に挿入 pdf1.insert_pdf(pdf2) # 結合されたドキュメントを保存 pdf1.save('merged_document.pdf')
PDF ドキュメントの分割
特定のページを新しい PDF に抽出するには:
# 元のドキュメントを開く pdf_document = fitz.open('example.pdf') # 抽出されたページ用の新しい PDF を作成 new_pdf = fitz.open() # 抽出するページ範囲を定義 (例: 2 ページから 4 ページ) start_page = 1 # 0 から始まるインデックス end_page = 4 # 排他的 # 指定されたページを新しい PDF に挿入 new_pdf.insert_pdf(pdf_document, from_page=start_page, to_page=end_page) # 新しい PDF を保存 new_pdf.save('extracted_pages.pdf')
ドキュメントを閉じる
PDF での操作が完了したら、ドキュメントを閉じてリソースを解放します。
pdf_document.close()
FAQs
load_page()
を使用してページをループし、各ページで get_text()
を呼び出します。
はい、insert_pdf()
を使用して、ある PDF から別の PDF にページを結合します。
はい、insert_text()
または注釈メソッドを使用してドキュメントを変更します。
結論
Fitz (PyMuPDF) は、Python での PDF 操作のための包括的なツールセットを提供し、テキスト抽出、コンテンツの変更、ドキュメントの結合や分割などのタスクに役立つリソースとなっています。詳細情報や高度な機能については、PyMuPDF ドキュメントを参照してください。
Python プロジェクトをクラウドにデプロイするための最適な選択肢である Leapcell をご利用ください。
Leapcell は、Web ホスティング、非同期タスク、および Redis のための次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、または Rust で開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い - リクエストも請求もありません。
比類のないコスト効率
- アイドル料金なしの従量課金制。
- 例: 25 ドルで、平均応答時間 60 ミリ秒で 694 万件のリクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的な UI。
- 完全に自動化された CI/CD パイプラインと GitOps の統合。
- 実用的な洞察のためのリアルタイムのメトリクスとログ記録。
簡単なスケーラビリティと高性能
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用オーバーヘッドがゼロ - 構築に集中するだけです。
詳細については、ドキュメントをご覧ください。
X でフォローしてください: @LeapcellHQ