使用Python的FPDF库将TXT转换为PDF时如何保留原有格式
解决方案
你的排版错乱核心是三个问题:用了非等宽字体、未配置文本左对齐规则、未处理空白字符保留逻辑,按下面方案修改即可:
- 第一步:切换为等宽字体,必须保证每个字符占位宽度完全一致,才能对齐txt里用空格拼接出来的表格
- 第二步:读取txt文件时指定编码避免乱码,同时将制表符替换为固定数量空格(一般1个制表符替换为4/8个空格,可匹配你原txt的制表符宽度调整)
- 第三步:调用
cell方法时显式指定左对齐,避免默认对齐规则打乱排版 - 第四步:调整行高匹配字体大小,避免行间距错位
修改后的可运行代码如下:
from fpdf import FPDF pdf = FPDF() pdf.add_page() # 切换为内置等宽字体Courier,字号可根据原txt显示需求调整 pdf.set_font("Courier", size = 10) # 读取文件时指定编码避免乱码 with open("Test", "r", encoding="utf-8") as f: for line in f: # 替换制表符为8个空格,可根据你原txt的制表符宽度调整数值 processed_line = line.expandtabs(8) # 显式指定左对齐(align参数设为'L') pdf.cell(0, 5, txt=processed_line, ln=1, align='L') filename='/Users/Test.pdf' pdf.output(filename, 'F')
如果默认Courier字体还是不符合需求,可以自行加载外部等宽字体(比如Consolas、思源等宽)到FPDF中,确保字符宽度完全统一即可。
内容的提问来源于stack exchange,提问作者Tcs106
相关产品推荐
相关产品推荐

