1. ReportLabの基本操作
Canvasの利用
ReportLabでPDFを作成するメインツールはcanvasクラスです。これにより、テキスト、線、四角形、その他のグラフィック要素を追加するためのメソッドが提供されます。
簡単なテキスト付きPDFの作成
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# 新しいPDFファイルを作成
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4
# テキストを追加
pdf_file.setFont("Helvetica", 12) # フォントとサイズを設定
pdf_file.drawString(100, height - 100, "こんにちは!ReportLabを使って作成されたレポートです。")
# PDFを保存して閉じる
pdf_file.save()
この例では、"こんにちは!ReportLabを使って作成されたレポートです。"というテキストを含む簡単なPDFファイルが1ページ目に作成されます。
2. PDFにテキストを追加する
ReportLabは、テキストのサイズ、フォント、色などを柔軟にカスタマイズできます。この機能は、ヘッダー、サブタイトル、メインテキストを分けて設定できるので構造化されたレポートの作成に重要です。
フォントとテキストサイズの設定
setFont()メソッドを使用してフォントとテキストサイズを設定できます。ReportLabは、Helvetica、Times-Roman、Courierなどの標準フォントをサポートしています。
pdf_file.setFont("Helvetica-Bold", 16) # 太字フォント
pdf_file.drawString(100, height - 50, "販売レポート") # タイトル
テキストの色を変更
ReportLabは、setFillColorRGB()メソッドを使用してRGB値(0から1の範囲)でテキストの色を設定できます。
pdf_file.setFillColorRGB(0, 0, 1) # 青色
pdf_file.drawString(100, height - 150, "このテキストは青色です。")
3. テキストブロックと複数行のテキストの操作
テキストが長い場合、drawString()を使い各行の座標を指定してブロック形式にすることができます。ただし、テキストを自動的に改行するにはdrawText()やTextObjectを使用する方が便利です。
TextObjectを使った複数行テキストの追加
text = """
2023年売上レポート。
このレポートには、販売データの詳細、分析、および予測が含まれます。
"""
# テキストオブジェクトを作成
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)
# テキストを追加
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
この例では、TextObjectを使って各行を自動的に改行するテキストオブジェクトが作成されます。
4. 複数ページのレポートの作成
複数ページのレポートを作成することで、より多くのデータを収容し、読みやすいドキュメント構造を作成できます。ReportLabで新しいページに移動するにはshowPage()メソッドを使用します。
複数ページPDFの作成
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# PDFを作成
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4
# ページ1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "ページ1: 序章")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "このレポートの最初のページです。")
pdf_file.showPage() # 新しいページに移動
# ページ2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "ページ2: データ")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "このレポートの2ページ目です。")
# PDFを保存して閉じる
pdf_file.save()
この例では、それぞれ独自のタイトルとテキストを持つ2ページから成るPDFが作成されます。メソッドshowPage()は現在のページを終了し、新しいページを開始します。
5. PDFに動的データを追加
ReportLabを使うことで、レポート自動化のためのリストや辞書など、動的データをPDFに追加できます。これは、テーブルやリストデータを含む定期的に更新されるレポートを作成する際に役立ちます。
リストからデータを追加
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
data = [
{"月": "1月", "販売": 200},
{"月": "2月", "販売": 300},
{"月": "3月", "販売": 250},
]
pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4
# タイトル
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "販売レポート")
# データを追加
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
line = f"{item['月']}: 販売 = {item['販売']}"
pdf_file.drawString(100, y_position, line)
y_position -= 20
# PDFを保存
pdf_file.save()
このコードでは、月ごとの販売データを各行に追加し、PDFファイルを作成します。
GO TO FULL VERSION