これまでの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リンクの挿入に活用できます。
コメント