django PDF FileResponse“无法加载 PDF 文档。”

Nig*_*gel 3 django pdf-generation reportlab

我正在尝试从 django 视图生成并输出 PDF。我使用 ReportLab 遵循 django 文档中的示例,但下载的 PDF 未在任何 PDF 阅读器中打开。

我使用Python 3.7.0,Django==2.1.3,reportlab==3.5.12。我尝试添加content_type="application/pdf"到“FileResponse”,但仍然遇到同样的问题。

import io
from django.http import FileResponse
from reportlab.pdfgen import canvas

def printPDF(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)


    p.drawString(100, 100, "Hello world.")


    p.showPage()
    p.save()

    return FileResponse(buffer, as_attachment=True, filename='hello.pdf')
Run Code Online (Sandbox Code Playgroud)

生成的 PDF 应该可以在所有 PDF 阅读器中打开。但我收到“无法加载 PDF 文档”。

小智 5

buffer = BytesIO()使用而不是文件来存储pdf文档。在使用 FileResponse 返回之前,您需要将流位置重置为其开始位置:

buffer.seek(io.SEEK_SET)
Run Code Online (Sandbox Code Playgroud)

现在 pdf 下载应该可以按预期工作。