django PDF文件响应“;未能加载PDF文档。”;
我试图从django视图生成并输出PDF。我遵循了中的示例,但下载的PDF不会在任何PDF阅读器中打开 我使用Python 3.7.0、Django==2.1.3、reportlab==3.5.12。我尝试将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
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年了。