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
相关产品推荐
相关产品推荐

