如何用FPDF库生成与原文本格式一致的PDF文件?
解决FPDF生成PDF时文本换行及保留原格式的问题
你的问题出在使用了pdf.text()方法——这个方法是绝对定位的单行输出,既不会识别文本里的换行符,也不会自动换行过长的内容,所以所有文本挤成一行,还可能因为坐标(0,0)出界导致显示不全。
要实现和原文本格式一致的PDF,改用pdf.multi_cell()方法即可,它会自动处理换行符,还能根据指定宽度自动换行。具体修改步骤如下:
- 正确读取文本文件:确保读取时保留原文本的换行符(用普通的
read()方法就行) - 替换
text()为multi_cell():设置合适的宽度、行高,传入文本内容 - 调整起始位置:避免内容出界,比如从页面顶部往下10单位的位置开始输出
修改后的完整代码示例:
from fpdf import FPDF # 读取文本文件内容,保留换行符 with open("你的文本文件名.txt", "r", encoding="utf-8") as f: text = f.read() pdf = FPDF() pdf.add_page() pdf.set_font('Arial', 'B', 14) # 使用multi_cell输出:宽度0表示占满页面可用宽度,行高设为10(可根据字体大小调整) # 起始位置x默认是当前位置,y设为10避免顶到页面边缘 pdf.multi_cell(0, 10, text) pdf.output("输出文件名.pdf", "F")
关键说明:
multi_cell(w, h, txt)参数:w=0:自动适配页面宽度(减去左右边距),超出宽度的内容会自动换行h=10:每行的高度,建议设为字体大小的1.2-1.5倍,保证行间距舒适txt:要输出的文本,里面的\n会被识别为换行,完美保留原文本的行结构
- 如果你需要自定义起始位置,可以用
pdf.set_xy(x, y)来设置,比如pdf.set_xy(10, 10)表示从页面左边10、顶部10的位置开始输出
内容的提问来源于stack exchange,提问作者Branch
相关产品推荐
相关产品推荐

