Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django PDF文件响应“;未能加载PDF文档。”;_Django_Pdf Generation_Reportlab - Fatal编程技术网

django PDF文件响应“;未能加载PDF文档。”;

django PDF文件响应“;未能加载PDF文档。”;,django,pdf-generation,reportlab,Django,Pdf Generation,Reportlab,我试图从django视图生成并输出PDF。我遵循了中的示例,但下载的PDF不会在任何PDF阅读器中打开 我使用Python 3.7.0、Django==2.1.3、reportlab==3.5.12。我尝试将content\u type=“application/pdf”添加到“FileResponse”,但仍然存在相同的问题 import io from django.http import FileResponse from reportlab.pdfgen import canvas d

我试图从django视图生成并输出PDF。我遵循了中的示例,但下载的PDF不会在任何PDF阅读器中打开

我使用Python 3.7.0、Django==2.1.3、reportlab==3.5.12。我尝试将
content\u 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')

生成的PDF应在所有PDF阅读器中打开。但是我发现“无法加载PDF文档”。

BytesIO
FileResponse
的交互中似乎有一些可疑之处。以下几点对我有用

def printPDF(请求):
response=HttpResponse(content\u type='application/pdf')
响应['Content-Disposition']='附件;filename=hello.pdf'
p=canvas.canvas(响应)
p、 抽绳(100100,“你好,世界。”)
p、 showPage()
p、 保存()
返回响应
使用
buffer=BytesIO()
代替文件来存储pdf文档。在使用FileResponse返回之前,您需要将流位置重置为其开始位置:

buffer.seek(io.SEEK_SET)

现在pdf下载应该可以正常工作了。

似乎是个bug。我最终使用了
xhtml2pdf
。我刚刚遇到了一个非常出色的uwsgi/Python3/
BytesIO
bug,已经有将近4年了。