2015-02-05 3 views
1

reportlab을 사용하여 제공된 사용자 데이터에서 PDF를 생성하는 python 스크립트를 만들었습니다. PDF가 잘 다운로드되고 모든 것이 명령 행에서 스크립트를 실행할 때 작동합니다. 그러나이 같은 구글 앱 엔진에 파일을 통과 할 때 :손상된 PDF를 반환하는 Google App Engine의 다운로드 가능한 PDF

... 

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 다운로드를 실행,하지만 난 그것을 열 때, 크롬이 파일을 열 수 없다고, 우분투의 문서 뷰어는 "일반/텍스트 문서를 열 수 없습니다"라고 말합니다. 문서의 속성을 확인하면 'application/pdf'라고 표시되고 적절한 .pdf 접미사가 붙어 있으며 김프 이미지 뷰어에서 열려고 시도합니다. , "문서가 손상되었습니다."라고 표시됩니다. webapp2 핸들러에 파일을 전달하는 방식에 문제가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다!

답변

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()) 
+0

OK, PLS, 텍사스를 자신의 대답을 받아들입니다. –

+0

2 일 동안 수락 할 수 없습니다. –

+0

와우, 30 분 정도 되곤 했었지만 몇 년 동안 떨어져 있었으므로 최근에야 내 정보가 구식이되었습니다! -) –