Skip to content

PyPDF

概念

pypdf は主に PDF の読み取り、結合、暗号化などに使います。文字内容を直接変更することはできません。高度な編集が必要な場合は、reportlab で新しい PDF を生成するか、PyMuPDFfitz)のような商用ライブラリを検討します。

文字抽出が文字化けする場合、フォント埋め込みの問題、または PDF が特殊なエンコードを使っている可能性があります。page.extract_text(extraction_mode="layout") を試すか、OCR ツール(例:pytesseract + pdf2image)を使います。

インストール

bash
pip install pypdf

PDF ファイル情報を読み取る

python
from pypdf import PdfReader

# PDF ファイルを開く
pdf = PdfReader("example.pdf")

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

# 文書情報を取得(作者、タイトルなど)
meta = pdf.metadata
print("タイトル:", meta.title)
print("作者:", meta.author)

テキスト内容を抽出する

python
from pypdf import PdfReader

pdf = PdfReader("example.pdf")
text = ""

for page in pdf.pages:
    text += page.extract_text() + "\n"

print(text)

複数の PDF を結合する

python
from pypdf import PdfWriter, PdfReader

writer = PdfWriter()

# 複数の PDF を追加
for filename in ["file1.pdf", "file2.pdf", "file3.pdf"]:
    reader = PdfReader(filename)
    for page in reader.pages:
        writer.add_page(page)

# 結合後の PDF を保存
with open("merged.pdf", "wb") as output_file:
    writer.write(output_file)

PDF を分割する

python
from pypdf import PdfReader

# 各ページを単独ファイルとして保存
reader = PdfReader("document.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as f:
        writer.write(f)

ページを回転する

python
from pypdf import PdfReader, PdfWriter

reader = PdfReader("input.pdf")
writer = PdfWriter()

for page in reader.pages:
    page.rotate(90)  # 時計回りに 90 度回転
    writer.add_page(page)

with open("rotated.pdf", "wb") as f:
    writer.write(f)

Released under the MIT License.