You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中将输出数据写入PDF?求合适PDF模块推荐

解决Python将列表逐行写入PDF的问题

首先,你的代码问题出在遍历str(data)上——当你把列表转成字符串"[1,2,3,4,5,6]"后,循环会逐个输出每个字符(包括方括号、逗号和空格),最终就会显示整个列表的字符串形式,而不是逐行输出元素。

修正现有fpdf代码(推荐升级到fpdf2)

你当前用的fpdf是比较旧的库,建议升级到它的现代维护分支fpdf2(功能更全,更新更活跃)。安装它:

pip install fpdf2

修正后的代码可以这样写,实现逐行输出列表元素:

from fpdf import FPDF  # fpdf2的导入方式和旧版一致,API兼容
data = [1,2,3,4,5,6]

pdf = FPDF(format='letter')
pdf.add_page()
pdf.set_font("Arial", size=12)

# 遍历列表中的每个元素,逐行写入
for item in data:
    pdf.write(5, str(item))  # 将元素转为字符串写入
    pdf.ln()  # 写完一个元素后换行

pdf.output("testings.pdf")

其他推荐的PDF生成模块

如果需要更复杂的PDF排版(比如表格、图片、复杂样式),可以考虑以下两个常用库:

1. ReportLab

ReportLab是Python生态中非常成熟的PDF生成库,支持丰富的排版功能。示例代码:

from reportlab.pdfgen import canvas

data = [1,2,3,4,5,6]
c = canvas.Canvas("testings.pdf")
c.setFont("Helvetica", 12)

# 设置起始y坐标,逐行写入(PDF坐标系原点在左下角)
y_position = 750
for item in data:
    c.drawString(50, y_position, str(item))
    y_position -= 15  # 每写一行,y坐标上移

c.save()

2. PyMuPDF(fitz)

如果需要结合PDF读取和生成,或者处理现有PDF,PyMuPDF是个不错的选择,它也支持生成简单的PDF内容:

import fitz

data = [1,2,3,4,5,6]
doc = fitz.open()  # 创建空PDF
page = doc.new_page()

# 设置字体和大小
font = fitz.Font("helv")
page.insert_font(fontname="helv", fontfile=fitz.Font("helv").buffer)

y = 700
for item in data:
    page.insert_text((50, y), str(item), fontsize=12, fontname="helv")
    y -= 15

doc.save("testings.pdf")

总结:如果你只是需要简单的文本逐行输出,升级到fpdf2并修改循环逻辑最省事;如果有更复杂的排版需求,ReportLab会是更好的选择。

内容的提问来源于stack exchange,提问作者Swe Zin Phyoe

火山引擎 最新活动