fpdf及fpdf2中table属性缺失问题咨询
fpdf及fpdf2中table属性缺失问题咨询
嘿,我来帮你捋捋这个问题哈!
首先得把两个库的情况分开说清楚:
- 你装的老版本
fpdf(1.7.2):这个库本身就完全没有table这个方法,它是比较早期的PDF生成工具,表格功能需要你手动通过循环绘制单元格来实现,没有封装好的table快捷接口。 - 你装的
fpdf2(2.8.4):这个版本其实已经支持table功能了,但你的代码里犯了一个容易踩的小坑——导入错了类!
你写的导入语句是from fpdf import FPDF,但如果你同时装了fpdf和fpdf2两个库,Python会优先导入老fpdf库的FPDF类,而不是fpdf2的。这就导致你拿到的其实是老库的对象,自然找不到table方法啦。
给你几个解决办法,按需选择:
- 明确导入fpdf2的FPDF类:把导入语句改成这样,直接指定用fpdf2的类:
这样你的代码就能正常调用from fpdf2 import FPDFtable方法生成表格了,是最省心的方案。 - 卸载老的fpdf库避免混淆:如果你完全用不上老
fpdf的话,直接在命令行执行:
之后再用pip uninstall fpdffrom fpdf import FPDF,Python就会自动导入fpdf2的类了(因为fpdf2兼容了这个导入路径)。 - 如果非要用老fpdf实现表格:那得手动控制坐标和单元格尺寸来画,给你个简单示例参考:
这个代码通过手动控制位置来模拟表格效果,适配老fpdf库的使用场景。from fpdf import FPDF TABLE_DATA = ( ("First name", "Last name", "Age", "City"), ("Jules", "Smith", "34", "San Juan"), ("Mary", "Ramos", "45", "Orlando"), ("Carlson", "Banks", "19", "Los Angeles"), ("Lucas", "Cimon", "31", "Angers"), ) pdf = FPDF() pdf.add_page() pdf.set_font("Times", size=16) # 手动定义每列的宽度 col_widths = [40, 40, 20, 50] current_y = pdf.get_y() for data_row in TABLE_DATA: current_x = 10 # 每行的起始x坐标 for idx, datum in enumerate(data_row): pdf.set_xy(current_x, current_y) # 绘制带边框的单元格 pdf.cell(col_widths[idx], 10, datum, border=1) current_x += col_widths[idx] current_y += 10 # 切换到下一行的y坐标 pdf.output('table.pdf')
试试第一个方案应该就能直接解决你的报错问题啦!




