【Day 24】Pythonで複数ページに自動対応するPDFレポートの作り方

Pythonで複数ページに自動対応するPDFレポートの作り方 未分類

これまでのPDF生成では、1ページに収まる内容を想定していました。
今回は、テーブルや文章が複数ページにまたがる場合に自動でページを追加する方法を学びます。
長めの報告書や複数月分の売上一覧などに活用できます。

📦 必要なライブラリ

pip install fpdf2

📝 Pythonコード:長いテーブルを複数ページで出力


from fpdf import FPDF
import datetime

# テーブルデータを多めに用意
headers = ["月", "売上(万円)", "利益率"]
data = []
for i in range(1, 37):  # 3年分のデータ
    data.append([f"{i}月", f"{100 + i}", f"{20 + i % 15}%"])

# PDF初期化
pdf = FPDF()
pdf.add_page()
pdf.add_font("Arial", '', 'arial.ttf', uni=True)
pdf.set_font("Arial", size=12)

# タイトル
pdf.cell(200, 10, txt="【売上レポート】複数ページ表データ", ln=True, align='L')

# 表設定
line_height = 10
col_widths = [40, 50, 40]
max_y = 270  # 下端余白を考慮した最大Y座標

# ヘッダー関数
def draw_header():
    pdf.set_fill_color(200, 200, 200)
    for i, header in enumerate(headers):
        pdf.cell(col_widths[i], line_height, header, border=1, fill=True)
    pdf.ln(line_height)

draw_header()

# データ描画(改ページ処理付き)
for row in data:
    if pdf.get_y() > max_y:
        pdf.add_page()
        draw_header()
    for i, item in enumerate(row):
        pdf.cell(col_widths[i], line_height, item, border=1)
    pdf.ln(line_height)

# 保存
filename = f"report_multi_page_{datetime.date.today()}.pdf"
pdf.output(filename)
print(f"✅ PDF出力完了: {filename}")

📌 ポイントと注意点

  • get_y() で現在の高さを取得し、ページ下限を超えたら add_page()
  • ページごとにヘッダーを再描画し、表の見やすさを維持
  • 複数ページ対応は報告書・契約書・リスト出力にも便利!

✅ まとめ

  • 長い表も自動的にページ分割してPDFに整形
  • ページごとの見出し(ヘッダー)も維持可能
  • 報告業務の自動化が一気に現実的に!

▶️ 次回予告

Day25では、PythonでQRコードを生成し、PDFレポートに埋め込む方法を学びます!
オンラインフォームやWebリンクの挿入に活用できます。

コメント

タイトルとURLをコピーしました