Windows / macOS / Linux を問わず、Python を使えば次のような PDF 作業が自動化できます。
- 読む / 書く / 分割 / 結合 / 抽出 / 回転 / 暗号化・解除
- テキスト抽出・表抽出
- ページ画像化・OCR
- フォーム入力 (AcroForm)
- PDF 生成(レポート・契約書・請求書)
中でも、現在メンテされている唯一の本流が pypdf です。
目次
- 1. 基本:pypdf の読み込み・情報取得
- 2. テキスト抽出(pypdf / pdfplumber)
- 3. ページ操作(分割・結合・回転・削除)
- 4. PDF 結合(Merge)・挿入
- 5. PDF の暗号化・復号(パスワード)
- 6. PDF への追記(テキスト・画像・スタンプ)reportlab + pypdf
- 7. PDF 生成(ゼロから作成)reportlab
- 8. OCR:画像化+文字認識(pytesseract)
- 9. PDF を画像化(サムネイル生成)
- 10. AcroForm(PDFフォーム)操作
- 11. PDF 内のリンク・注釈の取得(PyMuPDF)
- 12. バッチ処理(大量 PDF を一括処理)
- 13. 業務応用の例(テンプレ系)
- 14. まとめ:PDF は Python で完全自動化できる
1. 基本:pypdf の読み込み・情報取得
pypdf のインストール
Bash
pip install pypdfPDF を読み込む
Python
from pypdf import PdfReader
reader = PdfReader("sample.pdf")
print(len(reader.pages)) # ページ数メタデータ(プロパティ)取得
Python
info = reader.metadata
print(info.title)
print(info.author)
print(info.producer)
print(info.subject)ページサイズ・座標情報
Python
page = reader.pages[0]
print(page.mediabox) # ページ全体
print(page.cropbox) # クロップ領域2. テキスト抽出(pypdf / pdfplumber)
pypdf のテキスト抽出
Python
from pypdf import PdfReader
reader = PdfReader("sample.pdf")
for i, page in enumerate(reader.pages):
print("=== Page", i+1, "===")
print(page.extract_text())★ 注意
pypdf の抽出精度は普通〜やや弱い程度。
表・複雑レイアウトには pdfplumber 推奨。
pdfplumber の高精度テキスト抽出
Bash
pip install pdfplumberコード。
Python
import pdfplumber
with pdfplumber.open("sample.pdf") as pdf:
page = pdf.pages[0]
text = page.extract_text()
print(text)表(テーブル)の抽出(pdfplumber の最強機能)
Python
with pdfplumber.open("invoice.pdf") as pdf:
table = pdf.pages[0].extract_table()
for row in table:
print(row)3. ページ操作(分割・結合・回転・削除)
ページを分割(1ページずつ保存)
Python
from pypdf import PdfReader, PdfWriter
reader = PdfReader("big.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
page = reader.pages[0]
page.rotate(90) # clockwise
writer = PdfWriter()
writer.add_page(page)
with open("rotated.pdf", "wb") as f:
writer.write(f)ページ削除
Python
writer = PdfWriter()
for i, page in enumerate(reader.pages):
if i != 1: # 2ページ目を削除
writer.add_page(page)
with open("removed.pdf", "wb") as f:
writer.write(f)4. PDF 結合(Merge)・挿入
PDF を結合する(PdfMerger)
Python
from pypdf import PdfMerger
merger = PdfMerger()
merger.append("a.pdf")
merger.append("b.pdf")
merger.append("c.pdf")
merger.write("merged.pdf")
merger.close()結合前にページを挿入する(任意位置)
Python
merger = PdfMerger()
merger.append("main.pdf")
merger.merge(position=2, fileobj="insert.pdf") # 3ページ目の前に挿入
merger.write("merged.pdf")5. PDF の暗号化・復号(パスワード)
PDF をパスワードで暗号化
Python
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.encrypt("mysecret")
with open("encrypted.pdf", "wb") as f:
writer.write(f)パスワード PDF の解除
Python
reader = PdfReader("locked.pdf")
reader.decrypt("password123")6. PDF への追記(テキスト・画像・スタンプ)reportlab + pypdf
PDF に直接テキストを書くことは pypdf 単体では不可
➡ reportlab で “追記用PDF” を作って合成するのが定番。
テキスト追記(既存 PDF に書き込み)
Python
from reportlab.pdfgen import canvas
from pypdf import PdfReader, PdfWriter
# overlay.pdf を作成
c = canvas.Canvas("overlay.pdf")
c.drawString(50, 750, "追記テキスト:Python 追記")
c.save()
# 合成
base = PdfReader("sample.pdf")
overlay = PdfReader("overlay.pdf")
writer = PdfWriter()
base_page = base.pages[0]
overlay_page = overlay.pages[0]
base_page.merge_page(overlay_page)
writer.add_page(base_page)
with open("output.pdf", "wb") as f:
writer.write(f)画像を追記
Python
c = canvas.Canvas("overlay.pdf")
c.drawImage("logo.png", 50, 700, width=100, height=50)
c.save()(後は同様に merge)。
7. PDF 生成(ゼロから作成)reportlab
新しい PDF を生成
Python
from reportlab.pdfgen import canvas
c = canvas.Canvas("new.pdf")
c.setFont("Helvetica", 14)
c.drawString(50, 750, "Hello PDF!")
c.save()表(Table)を描画
Python
from reportlab.platypus import SimpleDocTemplate, Table
doc = SimpleDocTemplate("table.pdf")
data = [["列1", "列2", "列3"], [1,2,3], [4,5,6]]
table = Table(data)
doc.build([table])8. OCR:画像化+文字認識(pytesseract)
インストール
Bash
pip install pdf2image pytesseract pillow★ Windows の場合、別途 Tesseract の本体インストールが必要。
PDF → 画像化(pdf2image)
Python
from pdf2image import convert_from_path
pages = convert_from_path("sample.pdf")
pages[0].save("page1.png")OCR(pytesseract で読み取り)
Python
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("page1.png"), lang="jpn")
print(text)9. PDF を画像化(サムネイル生成)
Python
pages = convert_from_path("sample.pdf", dpi=200)
for i, page in enumerate(pages):
page.save(f"page_{i+1}.jpg")10. AcroForm(PDFフォーム)操作
フォームフィールドの一覧
Python
reader = PdfReader("form.pdf")
fields = reader.get_form_text_fields()
print(fields)テキストを埋め込む
Python
reader = PdfReader("form.pdf")
writer = PdfWriter()
writer.append(reader)
writer.update_page_form_field_values(
writer.pages[0],
{"company_name": "Python株式会社", "amount": "30,000"}
)
with open("filled.pdf", "wb") as f:
writer.write(f)11. PDF 内のリンク・注釈の取得(PyMuPDF)
pypdf は注釈が弱いので、PyMuPDF (fitz) を併用。
Bash
pip install pymupdf注釈を読み取る
Python
import fitz
doc = fitz.open("sample.pdf")
page = doc[0]
for annot in page.annots():
print(annot.type, annot.info)12. バッチ処理(大量 PDF を一括処理)
フォルダ内の PDF を一括結合
Python
import glob
from pypdf import PdfMerger
merger = PdfMerger()
for pdf in glob.glob("docs/*.pdf"):
merger.append(pdf)
merger.write("all.pdf")
merger.close()13. 業務応用の例(テンプレ系)
請求書 PDF から金額を自動抽出 → Excel へまとめる
領収書 PDF を OCR で読み取り → 会計ソフトへ取り込み
勤怠表 PDF の表データを抽出 → CSV へ変換
100 ファイルのレポート PDF を1冊に自動マージ
こちらは別記事として深掘り。
14. まとめ:PDF は Python で完全自動化できる
Python の PDF 操作は、
- pypdf:基本処理(読込・結合・分割・暗号化)
- pdfplumber:高精度テキスト / 表抽出
- reportlab:PDF 生成・追記
- pdf2image:画像化
- pytesseract:OCR
- PyMuPDF:注釈・リンク・高速レンダリング
これらを組み合わせると、
事務作業・経理・契約書・帳票・レポートの自動化がほぼ無限に可能です。

コメント