PythonのPyPDF2でPDFを操作する基本(最新版)

この記事では、PythonでPDFファイルの読み込み、テキスト抽出、ページの結合・回転、暗号化といった基本的な操作を行うためのライブラリPyPDF2の最新の使い方について解説します。

注記:PyPDF2はバージョン3.0で大幅に更新されました。この記事では、古いPdfFileReader/PdfFileWriterではなく、現在の標準であるPdfReader/PdfWriterクラスを使用します。


目次

1. 準備:PyPDF2のインストール

PyPDF2はサードパーティ製のライブラリなので、使用する前にインストールが必要です。

pip install PyPDF2

2. PDFからのテキスト抽出と復号

テキストを抽出する PdfReaderオブジェクトを使うことで、PDFファイルからページを取得し、テキストを抽出できます。ファイルはバイナリ読み込みモード('rb')で開きます。

import PyPDF2

# 'sample.pdf'という名前のPDFファイルがあると仮定
try:
    with open('sample.pdf', 'rb') as pdf_file:
        reader = PyPDF2.PdfReader(pdf_file)
        
        print(f"ページ数: {len(reader.pages)}")
        
        # 最初のページを取得
        first_page = reader.pages[0]
        # テキストを抽出
        text = first_page.extract_text()
        print("最初のページのテキスト:")
        print(text)

except FileNotFoundError:
    print("エラー: sample.pdfが見つかりません。")

暗号化されたPDFを復号する is_encrypted属性でファイルが暗号化されているかを確認し、decrypt()メソッドでパスワードを指定して復号できます。

# 'encrypted_sample.pdf'というパスワード付きPDFがあると仮定
# with open('encrypted_sample.pdf', 'rb') as pdf_file:
#     reader = PyPDF2.PdfReader(pdf_file)
#     if reader.is_encrypted:
#         try:
#             reader.decrypt('password123')
#             page = reader.pages[0]
#             print(page.extract_text())
#         except Exception as e:
#             print(f"復号に失敗しました: {e}")

3. PDFの作成とページ操作

PdfWriterオブジェクトを使うと、既存のPDFからページを操作して、新しいPDFファイルを作成できます。

ページをコピー(結合)する 複数のPDFファイルからページを抽出し、一つの新しいPDFにまとめることができます。

import PyPDF2

writer = PyPDF2.PdfWriter()

# 'doc1.pdf'と'doc2.pdf'があると仮定
pdf_files = ['doc1.pdf', 'doc2.pdf'] 

for filename in pdf_files:
    with open(filename, 'rb') as f:
        reader = PyPDF2.PdfReader(f)
        for page in reader.pages:
            writer.add_page(page)

# 結合した結果を新しいファイルに保存
with open('combined_docs.pdf', 'wb') as output_pdf:
    writer.write(output_pdf)

print("PDFを結合しました。")

ページを回転・重ね合わせる rotate()メソッドでページを回転させたり、merge_page()で別のPDFページを重ね合わせ(ウォーターマークなど)たりすることも可能です。

# with open('original.pdf', 'rb') as f_orig, open('watermark.pdf', 'rb') as f_wm:
#     reader = PyPDF2.PdfReader(f_orig)
#     watermark_page = PyPDF2.PdfReader(f_wm).pages[0]
#     writer = PyPDF2.PdfWriter()
#
#     first_page = reader.pages[0]
#     first_page.rotate(90) # 90度回転
#     first_page.merge_page(watermark_page) # ウォーターマークを重ねる
#     writer.add_page(first_page)
#
#     # 2ページ目以降を追加
#     for i in range(1, len(reader.pages)):
#         writer.add_page(reader.pages[i])
#
#     with open('modified_doc.pdf', 'wb') as output_pdf:
#         writer.write(output_pdf)

4. PDFを暗号化する

PdfWriterオブジェクトのencrypt()メソッドを使えば、作成中のPDFにパスワードを設定できます。

import PyPDF2

# 'source.pdf'を暗号化して保存する
with open('source.pdf', 'rb') as pdf_file:
    reader = PyPDF2.PdfReader(pdf_file)
    writer = PyPDF2.PdfWriter()

    for page in reader.pages:
        writer.add_page(page)
    
    # パスワード'supersecret'で暗号化
    writer.encrypt('supersecret')

    with open('encrypted_output.pdf', 'wb') as output_pdf:
        writer.write(output_pdf)

print("PDFを暗号化しました。")

まとめ

PyPDF2は、PythonでPDFを操作するための多機能なライブラリです。PdfReaderで既存のPDFから情報を読み取り、PdfWriterでページの追加、回転、結合、暗号化といった変更を加えて新しいPDFファイルとして保存するのが基本的な使い方です。ファイルの開閉にはwith文を使用し、メソッドは最新のAPI(例: len(reader.pages), reader.pages[i], writer.add_page())を使うことが推奨されます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次