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

Django中FPDF2生成PDF无法打开,如何正确返回HttpResponse?

问题原因与解决方法

你代码里的核心问题是没有正确获取FPDF2生成的PDF字节数据:当调用pdf.output(dest="S")时,这个方法会返回PDF的二进制字节流,但你只是调用了它却没保存返回值,反而把PDF实例对象直接传给了HttpResponse,这自然无法生成有效的PDF文件。

修正后的代码

class FormWizardQR(SessionWizardView):
    template_name = "invoices/qr.html"
    form_list = [FormStepOneBeneficiary, FormStepTwoPaymentInfos, FormStepThreeDebtor]

    def done(self, form_list, **kwargs):
        # GET DATA FROM FORMS
        form_data = dict(ChainMap(*[form.cleaned_data for form in form_list]))
        
        # PREPARE DATA FOR QR-PDF GENERATOR
        list_str_pay_to = []
        list_str_pay_by = []
        reference = form_data.get('ref_number')

        pdf = PDF('portrait', 'mm', 'A4')
        pdf.set_margins(left=0, top=0, right=0)
        pdf.add_page()
        pdf.border_bill()
        pdf.r_title("Récépissé")
        pdf.r_zone_indications(reference=reference, list_str_pay_to=list_str_pay_to, list_str_pay_by=list_str_pay_by)
       
        # 关键:接收output返回的PDF字节流
        pdf_bytes = pdf.output(dest="S")

        # 将字节流传入HttpResponse
        response = HttpResponse(pdf_bytes, content_type='application/pdf')
        response['Content-Disposition'] = "attachment; filename=myfilename.pdf"
        return response

关键说明

  • pdf.output(dest="S"):dest="S"参数指定以字符串(字节流)形式返回PDF内容,必须将这个返回值保存下来,这才是真正的PDF文件数据
  • 传给HttpResponse的必须是这个字节流,而不是PDF类的实例对象
  • 保持content_type='application/pdf'和Content-Disposition头的设置,确保浏览器正确识别并下载PDF文件

内容的提问来源于stack exchange,提问作者Goncalves

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:55:20