Skip to main content
 首页 » 编程设计

python之pdf文件不保存在Django中

2024年08月14日45xiaohuochai

我使用 Django 2.1.4 并使用 Django 示例创建 pdf 报告

def some_view(request): 
    # Create a file-like buffer to receive PDF data. 
    buffer = io.BytesIO() 
 
    # Create the PDF object, using the buffer as its "file." 
    p = canvas.Canvas(buffer) 
 
    # Draw things on the PDF. Here's where the PDF generation happens. 
    # See the ReportLab documentation for the full list of functionality. 
    p.drawString(100, 100, "Hello world.") 
 
    # Close the PDF object cleanly, and we're done. 
    p.showPage() 
    p.save() 
 
    # FileResponse sets the Content-Disposition header so that browsers 
    # present the option to save the file. 
    return FileResponse(buffer, as_attachment=True, filename='hello.pdf') 

它开始下载但从未完成。怎么了? 旧版本正常运行

def some_view(request): 
    # Create the HttpResponse object with the appropriate PDF headers. 
    response = HttpResponse(content_type='application/pdf') 
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"' 
 
    # Create the PDF object, using the response object as its "file." 
    p = canvas.Canvas(response) 
 
    # Draw things on the PDF. Here's where the PDF generation happens. 
    # See the ReportLab documentation for the full list of functionality. 
    p.drawString(100, 100, "Hello world.") 
 
    # Close the PDF object cleanly, and we're done. 
    p.showPage() 
    p.save() 
    return response 

请您参考如下方法:

我会看看这个例子(查询集除外),看看它是否有效,今天早些时候对我来说类似,How can i display my data in database and export it to pdf -Django

Get the value of the BytesIO buffer and write it to the response.

response = HttpResponse(content_type='application/pdf') 
response['Content-Disposition'] = 'attachment; filename="WishList.pdf"' 
from reportlab.pdfgen import canvas  
buffer = BytesIO() 
p = canvas.Canvas(buffer) 
p.drawString(100, 100, "Hello world.") 
p.showPage() 
p.save() 
pdf = buffer.getvalue() 
buffer.close() 
response.write(pdf) 
return response