【2025年版】pypdf入門:PythonでPDFの基本操作とテキスト抽出をマスターする

PDFからの情報収集、まだ手作業で消耗していませんか?

日々の業務でPDFファイルから特定の情報を抜き出したり、ページ数を確認したり、あるいはドキュメントのプロパティを調べたりする作業は、意外と手間がかかるものです。手作業でコピー&ペーストを繰り返したり、PDFビューアで一つ一つ確認したりしていると、あっという間に時間が過ぎてしまいます。

「もっと効率的にPDFからテキストを抽出できないか?」
「PythonでPDFの基本情報をプログラムで取得したい」
「PDF自動化の第一歩として、どのライブラリから始めれば良いのだろう?」

もしあなたがこのような疑問や課題を抱えているなら、ぜひこの記事を役に立ててください。

本記事では、PythonでPDFを扱うための最も基本的なライブラリの一つである「pypdf」に焦点を当て、PDFファイルの読み込み、テキスト抽出、そして基本的な情報取得の方法を、具体的なコード例を交えながら解説します。

この記事を読み終える頃には、pypdfを使ってPDFからの情報収集を自動化する基礎をマスターし、日々の業務を効率化する強力なツールを手に入れていることでしょう。


対象読者

  • PythonでPDFのテキスト抽出や情報取得を自動化したい開発者。
  • pypdfの基本的な使い方を学びたい初心者エンジニア。
  • PDFからの情報収集を効率化したい方。

動作検証環境

この記事で紹介するPythonを使ったPDF動作は、以下の環境で検証しています。

  • OS : macOS Tahoe Version 26.0
  • ハードウェア : MacBook Air 2024 M3 24GB
  • uv : 0.8.22 (ade2bdbd2 2025-09-23)
  • python : 3.13.7
  • pypdf : 6.1.1

目次

  1. pypdfとは?:特徴とインストール
  2. PDFファイルの読み込みと基本情報取得
    • PDFファイルのオープンとクローズ
    • ページ数の取得
    • ドキュメント情報の参照
  3. PDFからのテキスト抽出
    • ページごとのテキスト抽出
    • 全ページのテキスト一括抽出
    • 抽出時の注意点(文字化け対策の基礎)
  4. 簡単なPDF操作の紹介
    • ページの回転
  5. まとめ:pypdfで始めるPDF自動化の第一歩
  6. FAQ
  7. 参考資料
  8. 免責事項

1. pypdfとは?:特徴とインストール

pypdfは、PythonでPDFファイルを操作するためのオープンソースライブラリです。PDFの読み込み、分割、結合、テキスト抽出、フォームデータの操作など、モダンなAPIと改善されたパフォーマンスを提供しています。本記事では、pypdfの基本的な使い方を解説します。

特徴

  • シンプルで使いやすいAPI: 直感的なメソッド名で、PDF操作の学習コストが低い。
  • 幅広い機能: PDFの読み込みから基本的な編集まで、多くのユースケースに対応。
  • 純粋なPython実装: 外部ライブラリへの依存が少なく、環境構築が容易。

インストール

pypdfは、pipを使って簡単にインストールできます。

pip install pypdf

[著者の経験談]: 以前はPyPDF2という名前でしたが、開発が活発になり、より使いやすくなったpypdfとして生まれ変わりました。もし古いPyPDF2を使っている場合は、pip install --upgrade pypdfで更新することをお勧めします。


2. PDFファイルの読み込みと基本情報取得

まずは、PDFファイルをPythonで読み込み、その基本的な情報を取得する方法を見ていきましょう。

PDFファイルのオープンとクローズ

PDFファイルを操作するには、まずファイルを開く必要があります。pypdf.PdfReaderクラスを使用します。

from pypdf import PdfReader

# PDFファイルのパス
pdf_path = "sample.pdf" # 適切なPDFファイルパスに置き換えてください

# PDFファイルを読み込む
reader = PdfReader(pdf_path)

# ファイルがオープンされていることを確認(ここでは特に何もしないが、エラーハンドリングなどで利用可能)
print(f"PDFファイル '{pdf_path}' を開きました。")

# 通常、PdfReaderオブジェクトはwithステートメントで明示的にクローズする必要はありませんが、
# ファイルハンドラを確実に解放したい場合は、以下のようにwithステートメントを使用することもできます。
# with open(pdf_path, "rb") as f:
#     reader = PdfReader(f)
#     print(f"PDFファイル '{pdf_path}' を開きました。")

# 処理が完了したら、readerオブジェクトは自動的にクローズされます。

ページ数の取得

PDFドキュメントの総ページ数を取得するのは非常に簡単です。

from pypdf import PdfReader

# PDFファイルのパス
pdf_path = "sample.pdf" # 適切なPDFファイルパスに置き換えてください

# PDFファイルを読み込む
with open(pdf_path, "rb") as f:
    reader = PdfReader(f)
    print(f"PDFファイル '{pdf_path}' を開きました。")

    # ページ数を取得
    num_pages = len(reader.pages)
    print(f"総ページ数: {num_pages}")

ドキュメント情報の参照

PDFファイルには、タイトル、作成者、作成日などのメタデータが含まれていることがあります。これらの情報はmetadata属性から辞書形式で取得できます。

from pypdf import PdfReader

# PDFファイルのパス
pdf_path = "sample.pdf" # 適切なPDFファイルパスに置き換えてください

# PDFファイルを読み込む
with open(pdf_path, "rb") as f:
    reader = PdfReader(f)
    print(f"PDFファイル '{pdf_path}' を開きました。")

    # ドキュメントのメタデータを取得
    metadata = reader.metadata

    if metadata:
        print("\n--- ドキュメント情報 ---")
        if metadata.title:
            print(f"/Title: {metadata.title}")
        if metadata.author:
            print(f"/Author: {metadata.author}")
        if metadata.subject:
            print(f"/Subject: {metadata.subject}")
        if metadata.creator:
            print(f"/Creator: {metadata.creator}")
        if metadata.producer:
            print(f"/Producer: {metadata.producer}")
        if metadata.creation_date:
            print(f"/CreationDate: {metadata.creation_date}")
        if metadata.modification_date:
            print(f"/ModDate: {metadata.modification_date}")
    else:
        print("\nドキュメント情報が見つかりませんでした。")

3. PDFからのテキスト抽出

PDFからテキストを抽出することは、情報収集やデータ分析の自動化において非常に重要な機能です。pypdfでは、ページ単位でテキストを抽出できます。

ページごとのテキスト抽出

特定のページからテキストを抽出するには、pagesリストから目的のページオブジェクトを取得し、そのextract_text()メソッドを呼び出します。

from pypdf import PdfReader

pdf_path = "sample.pdf"

# PDFファイルを読み込む
with open(pdf_path, "rb") as f:
    reader = PdfReader(f)
    print(f"PDFファイル '{pdf_path}' を開きました。")

    # 1ページ目(インデックスは0から始まる)のテキストを抽出
    page = reader.pages[0]
    text = page.extract_text()
    print("\n--- 1ページ目のテキスト ---")
    print(text)

    # 2ページ目のテキストを抽出(もし存在すれば)
    if len(reader.pages) > 1:
        page2 = reader.pages[1]
        text2 = page2.extract_text()
        print("\n--- 2ページ目のテキスト ---")
        print(text2)

全ページのテキスト一括抽出

PDFドキュメント全体のテキストを一括で抽出するには、ループを使って各ページのテキストを結合します。

from pypdf import PdfReader

# PDFファイルのパス
pdf_path = "sample.pdf"  # 適切なPDFファイルパスに置き換えてください

# PDFファイルを読み込む
with open(pdf_path, "rb") as f:
    reader = PdfReader(f)
    print(f"PDFファイル '{pdf_path}' を開きました。")

    full_text = ""
    for page_num in range(len(reader.pages)):
        page = reader.pages[page_num]
        full_text += (
            page.extract_text() + "\n--- ページ区切り ---\n"
        )  # ページごとに区切りを入れる

    print("\n--- 全ページのテキスト ---")
    print(full_text)

抽出時の注意点(文字化け対策の基礎)

PDFからのテキスト抽出は、常に完璧とは限りません。特に日本語を含むPDFでは、以下のような問題が発生することがあります。

  • 文字化け: PDFに埋め込まれたフォントやエンコーディングの問題で、正しく文字が認識されない。
  • レイアウトの崩れ: テキストが本来の順序で抽出されず、意味不明な文字列になる。
  • 画像内のテキスト: 画像として埋め込まれたテキストは、OCR(光学文字認識)機能がない限り抽出できない。
[!TIP]: pypdfは純粋なPythonライブラリであり、OCR機能は持ちません。画像内のテキストを抽出したい場合は、PyMuPDFのようなより高度なライブラリや、外部のOCRツールとの連携を検討する必要があります。

文字化け対策の基礎:
pypdfで文字化けが発生した場合、根本的な解決は難しいことが多いですが、以下の点を確認してみてください。

  1. PDFファイルの品質: スキャンされたPDFや、特殊なフォントが使われているPDFは文字化けしやすい傾向があります。
  2. ライブラリのバージョン: 最新版のpypdfを使用しているか確認してください。改善されている場合があります。

日本語テキスト抽出の精度に課題がある場合は、本シリーズの「PyMuPDF入門」の記事も参考にしてください。PyMuPDFは日本語対応において高い評価を得ています。


4. 簡単なPDF操作の紹介

pypdfはテキスト抽出だけでなく、PDFの簡単な操作も可能です。ここでは、ページの回転を例に紹介します。

ページの回転

PDFのページを90度単位で回転させることができます。

from pypdf import PdfReader, PdfWriter

pdf_path = "sample.pdf"
output_path = "sample_rotated.pdf"  # 回転後のPDFを保存するパス

reader = PdfReader(pdf_path)
writer = PdfWriter()

# 1ページ目を90度回転させて追加
page = reader.pages[0]
page = page.rotate(90)  # 90, 180, 270度を指定可能
_ = writer.add_page(page)

# 残りのページはそのまま追加
for i in range(1, len(reader.pages)):
    _ = writer.add_page(reader.pages[i])

# 新しいPDFファイルとして保存
with open(output_path, "wb") as output_pdf:
    _ = writer.write(output_pdf)

print(f"\nPDFファイルを回転させ、'{output_path}' として保存しました。")
[!NOTE]: PdfWriterクラスは、新しいPDFファイルを作成したり、既存のPDFにページを追加したりするために使用します。

5. まとめ:pypdfで始めるPDF自動化の第一歩

本記事では、Pythonのpypdfライブラリを使って、PDFファイルの読み込み、ページ数やメタデータの取得、そしてテキスト抽出といった基本的な操作をマスターする方法を解説しました。

  • pypdfをインストールし、PdfReaderでPDFファイルをオープンする。
  • len(reader.pages)でページ数を、reader.metadataでドキュメント情報を取得する。
  • page.extract_text()でページごとのテキストを抽出する。
  • テキスト抽出時の文字化けやレイアウト崩れに注意し、必要に応じて他のライブラリも検討する。
  • PdfWriterを使ってページの回転などの簡単な操作も可能。

pypdfは、PDF自動化の強力な第一歩となるライブラリです。まずは手元のPDFファイルを使って、今回学んだコードを試してみてください。

はじめの一歩

  1. pip install pypdfでライブラリをインストールする。
  2. 手元にあるPDFファイル(例: my_document.pdf)を用意する。
  3. 本記事のコード例を参考に、そのPDFファイルからテキストを抽出してみる。

次のステップ

本シリーズの次回記事では、pypdfを使ったPDFの結合、分割、ページ操作といった、より実践的なドキュメント編集テクニックを深掘りします。

この記事が役に立ったら、ぜひチームに共有したり、X(旧Twitter)で感想をポストしてください!


6. FAQ

Q1: PyPDF2とpypdfは同じものですか?

A1: はい、実質的には同じものです。PyPDF2は元々広く使われていたライブラリですが、開発体制の変更と機能改善に伴い、最新バージョンは「pypdf」という名称でリリースされています。機能的には後方互換性を保ちつつ、よりモダンで効率的な実装がされています。新しいプロジェクトではpypdfを使用することをお勧めします。

Q2: テキスト抽出で文字化けが発生した場合、どうすれば良いですか?

A2: pypdfでの文字化けは、PDFファイル自体のエンコーディングやフォントの埋め込み方に起因することが多いです。まずはPDFファイルがテキストベースであるか(画像ではないか)を確認し、最新版のpypdfを使用しているか確認してください。それでも解決しない場合は、PyMuPDFのようなより高度なテキスト抽出機能を備えたライブラリを検討するか、PDFを画像として扱いOCR(光学文字認識)ツールと連携する方法も有効です。

Q3: pypdfで画像や表を抽出できますか?

A3: pypdfは、PDFからテキストを抽出することに特化しており、画像や表の構造を直接的に抽出する機能は持っていません。画像や表の抽出には、PyMuPDF(画像抽出)、pdfplumbercamelot(表抽出)といった、それぞれの機能に特化した別のライブラリを使用する必要があります。

Q4: pypdfは商用利用できますか?

A4: はい、pypdfはMITライセンスの下で提供されており、商用利用が可能です。ただし、ライセンスに関する最新かつ正確な情報は、常に公式のGitHubリポジトリやPyPIのプロジェクトページで確認することをお勧めします。


7. 参考資料


8. 免責事項

本記事および本シリーズは、Python PDFライブラリに関する一般的な情報と筆者の経験に基づいています。ライブラリの機能、パフォーマンス、ライセンス、日本語対応などは、バージョンアップや環境によって異なる場合があります。実際のプロジェクトに導入する際は、必ず公式ドキュメントを参照し、ご自身の責任において検証を行ってください。


SNSでもご購読できます。

コメントを残す

*