【问题标题】:pisa generated pdf visible in Chrome but not in Adobe reader比萨生成的 pdf 在 Chrome 中可见但在 Adob​​e 阅读器中不可见
【发布时间】:2015-06-09 04:02:40
【问题描述】:

我正在尝试将烧瓶中呈现的 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 中完全可见(通过转到磁盘上的位置直接打开),但我在 Adob​​e acrobat 阅读器中得到空白页。

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

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

【问题讨论】:

  • 您能否发布一个显示此问题的示例 PDF 文档?这可能有助于某人了解问题的实质,并可能有助于您解决问题。
  • 当然。这是一个这样的 pdf,大小为 2.73 kb。 Google Drive 链接(我应该以其他方式分享它吗?比如不知道的 pastebin 服务?)。您将看到表格等以获取用于滴定数据提交的空白表格。 file

标签: python google-chrome pdf flask


【解决方案1】:

我不是 Python 专家(我知道名字,仅此而已)所以我的解决方案可能不正确。但我确实认为我知道问题出在哪里,这应该可以帮助您找到您正在寻找的解决方案。

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

x0D x0D x0A

或者说

回车、回车、换行

这是错误的。来自 PDF 规范:

"按照惯例,PDF 文件中的标记被排列成 线条;见 7.2,“词汇约定”。每一行应以 行尾 (EOL) 标记,可以是回车 (0Dh)、 换行 (0Ah),或两者兼而有之。带有二进制数据的 PDF 文件可能有 任意长的行。”

我认为这是破坏 Adob​​e Reader 的原因。奇怪的是,Adobe Reader 和 Acrobat 非常适合这个文件,而许多其他(更糟糕的)PDF 阅读器(例如 Mac OS X Preview)似乎可以毫无问题地显示它。

所有这些都说,您似乎对行尾有问题。鉴于我对 Python 的了解有限,我可能会向您指出这一行:

file(filename, "w")

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

file(filename, "wb")

看看会发生什么。

我可以告诉你,就我所见,文件结构的其余部分似乎是正确的。所以我认为你有所有必要的对象等来正确显示文件(正如 Chrome 和 Mac Preview 所证明的那样),所以我真的认为行尾问题是你需要解决的问题。

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多