比萨生成的pdf在Chrome中可见但在Adobe Reader中不可见

时间:2015-04-04 04:40:46

标签: python google-chrome pdf flask

我正在尝试将已保存的html页面保存为烧瓶中的pdf格式。 我尝试了以下事项:

pdf=render_template('exp1_post.html',some_data=some_data)
filename = "simplePrint.pdf"        
pisa.CreatePDF(pdf, file(filename, "w"))

pdf=render_template('exp1_post.html',some_data=some_data)
filename = "simplePrint.pdf"        
pisa.CreatePDF(pdf.encode("ISO-8859-1"), file(filename, "w"))

但生成的pdf文件在Google Chrome中完全可见(通过转到磁盘上的位置直接打开),但我在Adobe Acrobat reader中获得空白页。

我可以找到类似的问题:PDF text show in Google Chrome but not in Adobe Acrobat

但我不确定如何在python中实现上述解决方案 Chrome版本41.0.2272.118米 Adobe Reader XI

1 个答案:

答案 0 :(得分:1)

我不是Python专家(我知道名字,就是这个)所以我的解决方案可能不正确。但我确实认为我知道问题是什么,这应该可以帮助您找到您正在寻找的解决方案。

当您使用二进制编辑器(或显示不可见字符的优秀文本编辑器)打开文件时,您会看到每行结尾由三个行尾字符组成:

  

x0D x0D x0A

或以其他方式说

  

回车,回车,换行

这是错误的。从PDF规范:

  

“作为惯例,PDF文件中的标记被排列成   线;见7.2,“词汇约定。”每行应终止   行尾(EOL)标记,可以是CARRIAGE RETURN(0Dh),a   LINE FEED(0Ah)或两者兼而有之。包含二进制数据的PDF文件可能有   任意长线。“

我认为这是打破Adobe Reader的原因。奇怪的是Adobe Reader和Acrobat在这个文件上很合适,而许多其他(更糟糕的)PDF阅读器(例如Mac OS X Preview)似乎没有任何问题地显示它。

所有这些都说,你似乎遇到了行结尾的问题。鉴于我对Python的知识有限,我可能会指出这一点:

file(filename, "w")

我在Python文档中读到,在某些平台上,这可以将文件视为ASCII文件并破坏二进制文件。由于PDF绝对是一个二进制文件,我会将其更改为:

file(filename, "wb")

看看会发生什么。

我可以告诉你,我可以看到其余的文件结构似乎是正确的。所以我认为你有所有必要的对象等来显示文件正确(由Chrome和Mac预览证明),所以我真的认为行结束问题是你需要解决的问题。