ReportLabでPDFを作るシリーズ第2弾
DocTemplateとLongTableを使おう
SimpleDocTemplateの使い方
doc = SimpleDocTemplate(filename=filename)
flowables = [
# Flowableオブジェクトのリスト
]
doc.build(flowables)
もっと複雑なレイアウトの例は第1弾の お前らのReportLabの使い方は間違っているを参照
LongTableの使い方
table = LongTable(table_contents, repeatRows=1)
repeatRowsを指定することで改ページ時に繰り返す行を指定する
TableStyleをセットして、罫線や寄せなどを指定できる。
サンプルソース
from reportlab.lib import colors
from reportlab.platypus import (LongTable, Paragraph, SimpleDocTemplate,
TableStyle)
def main() -> None:
filename = "/tmp/temp.pdf"
doc = SimpleDocTemplate(filename=filename)
table_style = TableStyle(
[
("ALIGN", (0, 0), (-1, 0), "CENTER"), # header
("GRID", (0, 0), (-1, 0), 2, colors.red), # header
("GRID", (0, 0), (-1, -1), 1, colors.black), # body
]
)
header1 = Paragraph("<font color='blue'>header1</font>")
table_contents = [
[header1, "header2", "header3"],
]
for i in range(1, 51):
table_contents.append([f"row {i}", f"{i+100}", f"{i+200}"])
table = LongTable(table_contents, repeatRows=1)
table.setStyle(table_style)
flowables = [table]
doc.build(flowables)
if __name__ == "__main__":
main()