Claude CodeでPDFレポートを自動生成する方法|ReportLabで帳票・納品物を出力する手順
PDFレポートの作成は、見た目の正確さが求められるぶん自動化しづらい領域です。帳票、納品物、月次報告書などフォーマットを維持したままデータを差し替える作業が毎回発生し、手動での微調整に時間を取られます。Excel やスプレッドシートと違い、PDF はレイアウト崩れが許容されにくく、出力のたびに目視確認が必要になるのが実情です。
Claude Code は ReportLab や WeasyPrint のコードを自然言語で生成できるため、テーブル構成、ページ番号、ヘッダー・フッター付きの PDF 帳票をスクリプトとして組み立てられます。Excelレポートの自動生成で openpyxl を扱いましたが、社外納品や印刷前提の帳票では PDF 形式が求められる場面が多く、その場合は ReportLab や HTML→PDF 変換のアプローチが実務に合います。
本記事のポイント
- Claude CodeはReportLabのコードを自然言語で生成できるため、テーブル構成、ページ番号、ヘッダー・フッター付きのPDF帳票を手作業なしで組める。
- PDF生成ライブラリはReportLab(精密レイアウト)、WeasyPrint(HTML→PDF変換)、FPDF(軽量出力)の3択が基本であり、用途で選ぶと手戻りが減る。
- 納品物や帳票のように見た目の正確さが求められるPDFは、HTML→PDF変換パターンの方がレイアウト調整が速いことが多い。
導入を検討すべき判断ポイント
- 帳票や納品物のPDFを毎回手動で作成・調整しており、フォーマット維持に時間がかかっている
- データは揃っているが、PDF出力のレイアウト制御やページ番号挿入をコードで書ける人がいない
- 社外向け報告書や請求書など「見た目の正確さ」が求められるPDFを定期的に出力している
レイアウトの再現とデータ差し替えの両方が毎回発生している業務ほど、Claude Code + PDF ライブラリの効果が出ます。
PDF生成ライブラリの選択肢
Python でPDFを生成するライブラリは複数ありますが、実務での選択肢は大きく3つに絞られます。用途に合わせて選ぶと、途中でライブラリを切り替える手戻りが減ります。
| ライブラリ | 特徴 | 向いている用途 | 日本語対応 |
|---|---|---|---|
| ReportLab | 座標指定で精密なレイアウト制御が可能。テーブル、グラフ、画像埋め込みに対応 | 帳票、請求書、検査レポートなど座標レベルの配置が必要な文書 | フォント登録で対応 |
| WeasyPrint | HTML+CSSをPDFに変換。Webデザインの知識がそのまま使える | 納品物、提案書、レイアウトが複雑な報告書 | CSS font-faceで対応 |
| FPDF | 軽量で依存が少ない。シンプルなPDF出力に向く | 領収書、ラベル、単純な一覧表 | フォント登録で対応 |
Claude Code はいずれのライブラリのコードも生成できます。迷った場合は、レイアウトの精密さが必要なら ReportLab、見た目の調整を CSS で行いたいなら WeasyPrintを選ぶのが実務的です。
基本:テキストとテーブルのPDF出力
まずは ReportLab で最小限のPDFを生成するパターンです。プロジェクト構成を先に固定しておくと、Claude Code への指示がシンプルになります。
pdf-report-project/
input/
monthly-data.csv # 月次データCSV
fonts/
NotoSansJP-Regular.ttf # 日本語フォント
templates/
header-logo.png # ロゴ画像(任意)
rules/
report-rules.md # レイアウトルール、列定義
output/
monthly-report.pdf
Claude Code への指示例は次のとおりです。
# Claude Code への指示例
input/monthly-data.csv を読み込み、output/monthly-report.pdf へ出力して。
- ReportLab を使用
- 日本語フォントは fonts/NotoSansJP-Regular.ttf を登録
- タイトル「月次実績レポート」をページ上部に配置
- CSVデータをテーブル形式で出力(ヘッダー行は背景色 #2C3E50、文字色 白)
- 金額列は3桁カンマ区切り
- テーブルの罫線は薄いグレー
このレベルの指示で、ReportLab の SimpleDocTemplate、Table、TableStyle を使ったコードが生成されます。テーブルの列幅指定、セル内の文字揃え、行の交互背景色なども自然言語で追加できます。
応用:ブランドテンプレート適用とページ番号
社外向けの帳票や納品物では、ロゴ、ヘッダー・フッター、ページ番号が必要になります。ReportLab ではページテンプレート機能を使って、全ページ共通の要素を定義できます。
# ブランドテンプレート適用の指示例
先ほどの月次レポートに以下を追加して。
- 全ページの左上に templates/header-logo.png を配置(幅4cm)
- ヘッダー右側に「株式会社〇〇 月次実績レポート」を表示
- フッター中央にページ番号「X / Y」形式で表示
- フッター右下に出力日時を自動挿入
- ページ余白は上3cm、下2.5cm、左右2cm
ReportLab の BaseDocTemplate と PageTemplate を組み合わせることで、ヘッダー・フッターの描画関数を定義し、全ページに適用できます。Claude Code はこの構成のコードも自然言語から生成できるため、PDF帳票の「見た目の骨格」を短時間で組めます。
ポイントは、ロゴの位置とフッターのレイアウトを先に固定し、本文エリアのサイズを逆算することです。余白やヘッダー高さを後から変えると、テーブルの列幅やフォントサイズの再調整が発生します。
HTML→PDF変換パターン
納品物や提案書のように、レイアウトが複雑でデザイン要素が多いPDFには、WeasyPrint による HTML→PDF 変換が向いています。CSSの知識がそのまま使えるため、Word文書の自動生成よりもレイアウト調整が直感的に進みます。
# WeasyPrint パターンの指示例
以下のHTMLテンプレートを使って、input/monthly-data.csv のデータを埋め込み、
WeasyPrint で output/delivery-report.pdf へ変換して。
- Jinja2 テンプレートで CSV データをテーブルに展開
- CSSで A4 縦レイアウト、余白 2cm を指定
- テーブルのヘッダーは固定(改ページ時にも繰り返し表示)
- 改ページ位置は行数で自動制御
WeasyPrint のメリットは、HTML+CSS でレイアウトを定義するため、ブラウザでプレビューしながら調整できることです。特に複数カラムのレイアウト、画像の回り込み、改ページ制御など、ReportLab では座標計算が必要な処理が CSS だけで済みます。
| 比較軸 | ReportLab | WeasyPrint |
|---|---|---|
| レイアウト定義 | Python コードで座標指定 | HTML + CSS |
| プレビュー | PDF出力後に確認 | ブラウザで即時確認可能 |
| 複雑なレイアウト | 座標計算が必要 | CSSで直感的に記述 |
| テーブルの改ページ | コードで制御 | CSS の break-inside で制御 |
| 依存関係 | pip install のみ | システムライブラリが必要な場合あり |
人が確認する境界はここ
PDF生成を自動化しても、以下のポイントは人が目視で確認すべきです。
- 改ページ位置:テーブルが中途半端な位置で切れていないか。特に行数が可変のデータで発生しやすい
- 日本語の文字化け:フォント登録が漏れていると文字が表示されない。初回生成時に必ず確認
- 数値の桁・単位:CSV のデータ型が意図どおりに変換されているか。特に金額と日付
- ロゴ・ヘッダーの位置ずれ:画像の解像度やアスペクト比が変わるとレイアウトが崩れる
- 印刷時の余白:画面表示では問題なくても、実際に印刷すると端が切れるケースがある
自動化の効果が出るのは「毎回同じ確認ポイントを同じ手順で回せる」状態を作ることです。チェックリストをスクリプトと一緒に管理しておくと、担当者が変わっても品質が維持できます。
よくある質問
日本語フォントは対応している?
ReportLab、WeasyPrint、FPDF いずれも日本語フォントに対応しています。Noto Sans JP や IPAex ゴシックなどの TrueType フォントを登録すれば、日本語のテキストやテーブルを正しく表示できます。Claude Code に「日本語フォントを登録して」と指示すれば、フォント登録のコードも含めて生成されます。
既存PDFの編集もできる?
既存 PDF の編集には PyPDF2 や pikepdf を使います。ページの結合・分割、透かしの追加、メタデータの編集が可能です。ただし、既存 PDF 内のテキストやレイアウトを直接書き換えるのは技術的に難しく、実務では「既存 PDF をベースに新しい PDF を生成し直す」パターンが現実的です。
画像やグラフを埋め込めるか?
ReportLab は matplotlib や Pillow で生成した画像をそのまま PDF に埋め込めます。グラフを matplotlib で描画し、PNG として保存してから ReportLab で配置する流れが一般的です。WeasyPrint の場合は HTML の img タグで画像を参照するだけで埋め込めるため、より簡潔です。
Word/PPTXからPDF変換はできるか?
Word から PDF への変換は Claude Code で Word 文書を自動生成する方法、PowerPoint の自動化は Claude Code でパワポ資料を自動生成する方法 でそれぞれ整理しています。LibreOffice のコマンドライン変換を使えば .docx や .pptx を PDF に変換できますが、レイアウトの再現性は完全ではないため、最初から PDF として生成する方が確実です。
公開情報と責任主体
本記事は 2026年2月17日時点の運用前提で、ファネルAi編集部が執筆し、ファネルAi監修チームがレビューしています。更新方針は レビュー方針 に沿います。ここで示すファイル構成やコード指示例は運用設計を理解するための例であり、実際の導入では自社のデータ形式、帳票フォーマット、納品物の仕様に合わせて調整してください。
関連ページと関連記事
PDF レポートの自動生成は、他の Office 系出力やドキュメント自動化と並べて見ると全体像が掴みやすくなります。
- Claude Codeでパワポ資料を自動生成する方法:python-pptx を使った PowerPoint 自動化の設計パターンを確認できます。
- Claude CodeでWord文書を自動生成する方法:python-docx での Word 出力パターンを整理しています。PDF との使い分け判断にも使えます。
- Claude Codeで提案書・見積書を一括生成する方法:テンプレートへの差し込み生成パターンを整理しています。帳票の一括出力にも応用できます。
- Claude CodeでExcelレポートを自動生成する方法:openpyxl での Excel 出力を整理しています。PDF と Excel の出し分け判断に参考になります。
- Claude Codeで業務ドキュメントワークフローを構築する方法:ドキュメント生成の全体フローを確認できます。
PDF帳票の自動化をPoCから固めたい場合
記事で見えてきた自動化の論点を、PoCの進め方や実装範囲まで含めて具体化したい場合は、超速AI PoC も確認しておくと判断しやすくなります。
相談前に整理しておくと早い3項目
- 自動化したいPDF帳票の現物と、入力元CSV・データソースの一覧を用意する
- 出力PDFのレイアウト要件(ヘッダー・フッター、ロゴ、ページ番号、テーブル構成)を現行帳票から洗い出す
- 配布先(社内・社外)と更新頻度(日次・週次・月次)、印刷の有無を決めておく
この前提があると、PoCで作るべきスクリプトの範囲とライブラリ選定を短時間で固められます。