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())を使うことが推奨されます。

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

この記事を書いた人

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

目次