在django 1.8中,我有几个函数可以读取pdf文件并返回它们,并生成带有reportlab的pdf并返回它。 在某些情况下,文件是正确提供的,但有时PDF浏览器会打开,就像它是html一样,更奇怪的是,pdf源显示在我的django基本模板中。 在这种情况下,如果在错误之后重新加载页面,则提供pdf。
这是视图的代码:
fpdf = open (path, 'rb')
return HttpResponse (FileWrapper (fpdf), content_type = 'application/pdf')
这是另一个的代码:
pdf = pisa.CreatePDF (StringIO.StringIO (html.encode ("UTF-8")), result)
if not pdf.err:
response = HttpResponse (result.getvalue (), content_type = 'application / pdf')
response ['Content-Disposition'] = 'attachment; filename =% S.pdf '% (doc.name.replace ("", "_"))
return response
#Return HttpResponse (result.getvalue (), content_type = 'application/pdf')
将PDF作为附件返回是我所做的测试,看看是否已解决,因为所需的行为将直接打开文件。 不幸的是,错误仍然会发生。
答案 0 :(得分:1)
更改此行
response = HttpResponse (result.getvalue (), content_type = 'application / pdf')
到这一行
response = HttpResponse (result.getvalue (), content_type = 'application/octet-stream')
这将使文件被视为二进制文件,并下载到用户而不是在浏览器中打开它。
如果您在浏览器中查看它,请按照Igor Pomaranskiy的建议,并通过执行以下操作删除content_type变量中的空间
改变这个 content_type =' application / pdf' 到这个
content_type = 'application/pdf'