如何在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




