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

大家好,我是派森酱。

今天接到一个需求,就是从应用系统中导出一份 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 写的,是不是很不错?

交流群

时隔2个月,摸鱼学习交流群再次限时开放了。

b2902571e37ee1156a18849eeb152fd9.png

Python技术交流群(技术交流、摸鱼、白嫖课程为主)又不定时开放了,感兴趣的朋友,可以在下方公号内回复:666,即可进入,一起 100 天计划

老规矩,酱友们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

64e5d5943c7af9329bb19c143edfe7f7.gif

神秘礼包获取方式

识别下方公众号,回复:1024

37c68784dbb3d5b2b93d5b07030d5208.jpeg

猜你喜欢

转载自blog.csdn.net/weixin_48923393/article/details/129173640