今天接到一个需求,就是从应用系统中导出一份 PDF 报告,这份报告中既有文本段落,也有动态表格,还有图片。
我们系统的后端使用的是 Java,所以我用 itextpdf 实现了功能。
回来之后,想到 python 里面应该也有类似的包来实现,所以进行了一番探索。
今天就给大家来讲讲怎么使用 reportlab 生成一份图文并茂的 PDF。
文章末尾有彩蛋!
首先,我们需要安装 ReportLab。可以使用pip命令来安装:
pip install reportlab
在开始创建PDF文档之前,我们需要导入ReportLab的Canvas类:
from reportlab.pdfgen import canvas
接下来,我们可以创建一个Canvas对象,指定PDF文件的名称和路径:
pdf_name = "my_tech_article.pdf"
pdf = canvas.Canvas(pdf_name)
我们可以使用drawString()方法在PDF文档中添加文本:
pdf.drawString(50, 750, "My Technical Article")
这个方法的前两个参数是文本的x和y坐标,第三个参数是文本内容。
我们可以使用drawImage()方法在PDF文档中添加图像:
from reportlab.lib.pagesizes import letter
pdf.drawImage("my_image.png", 50, 650, width=letter[0], height=letter[1]/2)
这个方法的前三个参数是图像的x和y坐标,第四个参数是图像的宽度,第五个参数是图像的高度。
我们可以使用Table类来添加表格。首先,需要导入Table类:
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
from reportlab.lib.units import inch
from reportlab.platypus import Table
data = [ ["Name", "Age", "Gender"],
["John", "25", "Male"],
["Sarah", "30", "Female"],
["Tom", "35", "Male"],
]
table = Table(data)
table.setStyle(
[
("BACKGROUND", (0, 0), (-1, 0), colors.grey),
("TEXTCOLOR", (0, 0), (-1, 0), colors.whitesmoke),
("ALIGN", (0, 0), (-1, 0), "CENTER"),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1, 0), 14),
("BOTTOMPADDING", (0, 0), (-1, 0), 12),
("BACKGROUND", (0, 1), (-1, -1), colors.beige),
("TEXTCOLOR", (0, 1), (-1, -1), colors.black),
("ALIGN", (0, 1), (-1, -1), "CENTER"),
("FONTNAME", (0, 1), (-1, -1), "Helvetica"),
("FONTSIZE", (0, 1), (-1, -1), 12),
("BOTTOMPADDING", (0, 1), (-1, -1), 6),
("GRID", (0, 0), (-1, -1), 1, colors.black),
]
)
偷偷告诉大家,上面这些内容是 ChatGPT 写的,是不是很不错?