我正在尝试将已保存的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
答案 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预览证明),所以我真的认为行结束问题是你需要解决的问题。