用途
ReportLab 是一个开源 Python 库,用于以编程方式创建 PDF 文档。它适合需要自动生成 PDF 的场景,例如报告、发票、收据、证书、标签和表单,也适合需要对 PDF 版面与样式进行精确控制、或需要包含表格、图表和图形的自定义文档。
主要能力
ReportLab 提供两种 API:
- Canvas API(低层):直接在 PDF 页面上绘制,使用 x、y 坐标精确定位,类似在画布上作画。适合简单文档、自定义布局和图形密集型 PDF。
- Platypus API(高层):使用可流动(flowable)文档元素,自动布局和分页,更适合复杂多页文档,如报告、文章和大量文本的文档。
技能内容覆盖:
- 安装与版本检查
- 文本绘制、字体与字号设置、颜色、对齐、多行文本
- 形状与线条:直线、矩形、填充矩形、圆形、圆角矩形
- 图片插入,支持保持宽高比
- 段落与样式:内置样式、自定义 ParagraphStyle、居中与两端对齐
- 表格:创建表格、表头与数据行样式、网格、背景色、对齐
- 图表:柱状图(VerticalBarChart)和饼图(Pie)
- 常见问题处理:文本超出页面、图片未找到、Unicode 字符不显示
- 最佳实践:选择合适的 API、使用测量常量、统一定义样式、测试页面尺寸、谨慎处理图片、用表格做布局、缓存字体
使用方式
检查是否已安装:
python3 -c "import reportlab; print(reportlab.Version)"
如未安装:
pip3 install reportlab
如需额外字体和功能:
pip3 install reportlab[renderPM,rlPyCairo]
Canvas 基本用法示例:
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
c = canvas.Canvas("output.pdf", pagesize=letter)
width, height = letter
c.drawString(100, height - 100, "Hello, World!")
c.setFont("Helvetica-Bold", 24)
c.drawString(100, height - 150, "Large Bold Text")
c.save()
Platypus 基本用法示例:
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
doc = SimpleDocTemplate("document.pdf", pagesize=letter)
story = []
styles = getSampleStyleSheet()
story.append(Paragraph("Document Title", styles['Title']))
story.append(Spacer(1, 0.2*inch))
story.append(Paragraph("This is a paragraph of text.", styles['Normal']))
doc.build(story)
适用场景
- 自动化生成报告、发票、收据
- 创建证书、标签、表单
- 需要自定义 PDF 布局,包含表格、图表或图形
- 需要对 PDF 版面与样式进行精确控制
- 需要批量或程序化生成文档
限制
资料中未提供关于收费、价格、平台支持范围或性能上限的具体说明。使用中可能遇到文本超出页面、图片路径不存在、Unicode 字符无法显示等问题,需按技能中给出的方法处理(如计算可用空间、检查文件存在、注册 TrueType 字体)。