用户可下载的Google App Engine中的PDF可返回损坏的PDF文件

时间:2015-02-05 01:44:42

标签: python google-app-engine pdf reportlab

我已经创建了一个python脚本,它使用reportlab从提供的用户数据生成PDF。 PDF文件下载正常,当我从命令行运行脚本时,一切正常。但是,当我尝试将文件传递给Google App Engine时:

...

outputstream = StringIO.StringIO()
PDF = output.write(outputstream)

class PDFHandler(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'application/pdf'
        self.response.headers['Content-Disposition'] = 'attachment; filename=Myfile.pdf'
        self.response.headers['Content-Transfer-Encoding'] = 'binary'
        self.response.out.write(PDF)

并运行开发服务器,PDF下载,但是当我尝试打开它时,chrome说它无法打开文件,Ubuntu的文档查看器说“无法打开普通/文本文档”,即使我在检查文档的属性,它声明'application / pdf'并且它具有相应的.pdf后缀,当我尝试在GIMP图像查看器中打开它时,它指出“文档已损坏”。我将文件传递给webapp2处理程序的方式有问题吗?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我通过查看一些旧教程解决了这个问题。这是在代码的最后一行,我忽略了将.getvalue()包含在输出中:

outputstream = StringIO.StringIO()
PDF = output.write(outputstream)

class PDFHandler(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'application/pdf'
        self.response.headers['Content-Disposition'] = 'attachment; filename=Myfile.pdf'
        self.response.headers['Content-Transfer-Encoding'] = 'binary'
        self.response.out.write(PDF.getvalue())