使用Python FPDF库将TXT转PDF后无法查看内容的问题求助
解决FPDF生成PDF无内容的问题
核心问题分析
原代码使用pdf.cell()方法插入文本,但该方法仅支持单行文本输出,如果TXT文件内容包含换行、超过单元格宽度的长文本,会导致内容被截断或无法正常渲染。此外,若文本包含中文,默认Arial字体可能不支持中文编码,也会造成内容不显示。
具体修正方案
1. 替换cell为multi_cell实现自动换行
multi_cell会根据设定宽度自动换行,适配多行文本:
def txttopdf(request): if request.method == 'POST': txt = request.FILES['txt'] pdf = fpdf.FPDF() pdf.add_page() pdf.set_font("Arial", size=12) # 替换cell为multi_cell,参数依次为:宽度、高度、文本、边框、对齐、是否填充 pdf.multi_cell(0, 10, txt.read().decode('utf-8'), 0, 'L') return HttpResponse(pdf.output(dest='S'), content_type='application/pdf') return render(request, 'txttopdf.html')
- 第一个参数设为
0表示使用页面剩余宽度,适配不同页面尺寸 - 第二个参数
10是每行的高度,可根据字体大小调整
2. 处理中文显示问题(若TXT含中文)
如果TXT文件包含中文,默认Arial字体不支持中文,需添加支持中文的字体:
def txttopdf(request): if request.method == 'POST': txt = request.FILES['txt'] pdf = fpdf.FPDF() pdf.add_page() # 添加支持中文的字体(以SimHei为例,需将字体文件放入FPDF的fonts目录) pdf.add_font("SimHei", "", "SimHei.ttf", uni=True) pdf.set_font("SimHei", size=12) pdf.multi_cell(0, 10, txt.read().decode('utf-8'), 0, 'L') return HttpResponse(pdf.output(dest='S'), content_type='application/pdf') return render(request, 'txttopdf.html')
- 需将对应中文字体文件(如
SimHei.ttf)放置在FPDF库的fonts目录下,或指定完整路径
3. 确保文本编码正确
读取TXT文件时,若编码不是utf-8,会导致乱码或不显示,可增加编码容错处理:
text_content = txt.read().decode('utf-8', errors='replace')
errors='replace'会将无法解码的字符替换为占位符,避免因编码错误导致整个PDF内容失效
验证步骤
- 上传包含多行、长文本的TXT文件测试
- 若含中文,确认字体文件已正确添加
- 检查生成的PDF是否正常显示所有内容
内容的提问来源于stack exchange,提问作者Yusuf Üzeyir Kaya
相关产品推荐
相关产品推荐

