当前位置: 首页 > 工具软件 > ReportLab > 使用案例 >

使用 ReportLab,python操作PDF一键生成

东方英豪
2023-12-01

今天接到一个需求,就是从应用系统中导出一份 PDF 报告,这份报告中既有文本段落,也有动态表格,还有图片。

我们系统的后端使用的是 Java,所以我用 itextpdf 实现了功能。

回来之后,想到 python 里面应该也有类似的包来实现,所以进行了一番探索。

今天就给大家来讲讲怎么使用 reportlab 生成一份图文并茂的 PDF。

文章末尾有彩蛋!

安装 ReportLab

首先,我们需要安装 ReportLab。可以使用pip命令来安装:

pip install reportlab

创建 PDF 文档

在开始创建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 写的,是不是很不错?

 类似资料: