You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:01:12