【问题标题】:Upgrade pdflib from 6 to 9, now code creates corrupt PDFs?将 pdflib 从 6 升级到 9,现在代码会创建损坏的 PDF?
【发布时间】:2015-01-19 19:49:21
【问题描述】:

我有一个 PHP 应用程序运行 PDFlib 程序来生成 PDF。版本 6 已经运行良好很长时间了。我们即将更换服务器,并决定将所有软件升级到最新版本。

嗯,使用 PDFlib 创建 PDF 的程序部分现在会生成 Acrobat 认为“已损坏且无法修复”的 PDF。奇怪的是,Firefox 使用 Adob​​e 插件打开文件就好了。通用的 Ubuntu PDF 查看器也是如此。但是当我下载 PDF 并尝试在 Acrobat Reader 或完整的 Acrobat 中打开它时,它说文件已损坏且无法修复。

以前有人看过这个吗,或者你知道我应该从哪里开始寻找吗? Firefox 和 Ubuntu 可以读取它的事实告诉我,它不会那么损坏。事实上,对于那些拥有所有图形和不同颜色的文本和字体以及一切的读者来说,它看起来非常好。这一定是个愚蠢的事情。

编辑:

好的,我将生成错误 PDF 的 PHP 文件删除为“Begin Document”、“Begin Page”、“End Page", "End Document" 并且没有错误。然后我添加了一个背景图像加载并发现了第一个问题。

$bgImageUrl = $_SERVER['DOCUMENT_ROOT'] ."path/to/fadedBG2.png"; 
$bgImageData = file_get_contents($bgImageUrl); 
$p->create_pvf("/pvf/bgImageData", $bgImageData, ""); 
$bgImage = $p->load_image("auto", "/pvf/bgImageData" , "");

最后一行导致文件损坏。我几乎直接从 pdfLib 网站复制了这段代码,所以我不确定这里发生了什么。

【问题讨论】:

  • 您说下载文件时会发生这种情况,但可以打开文件。这是通过浏览器下载的吗?因为这个错误对我来说更像是一个与 pdflib 相关的浏览器。如果 pdf 本身已损坏 - 您根本无法打开它。你可以直接在它构建的机器上打开它而没有任何问题吗?
  • 嗨,艾伦。谢谢回答。如果 Firefox 设置为使用 Adob​​e 插件打开 PDF,那么它可以正常打开并且看起来很完美。如果我下载文件并尝试在 Windows 中使用 Adob​​e Acrobat 或 Adob​​e Reader 打开它,则会收到“损坏且无法修复”错误。如果我将文件下载到 Ubuntu 并使用默认安装在 Ubuntu 上的通用 PDF 阅读器打开它,那么它就可以正常打开。因此,出于某种原因,这似乎只是 Acrobat 的问题。但我需要它来工作。我可能会下载发票并通过电子邮件发送,如果客户看不懂,那就是个问题。
  • 我认为@Allan 的观点是下载它可能会增加一些 Ubuntu 和 Firefox 容忍的损坏。您可以在本地运行这一代,将 PDF 保存到磁盘,然后尝试加载它(即它根本不通过 HTTP 传输)吗?值得一试,缩小范围?
  • 我想弄清楚你为什么从我的问题中删除了“谢谢”。我还试图弄清楚使用第 9 版软件生成的文件的 https 传输将如何损坏正在传输的文件,而同一进程不会损坏使用第 6 版软件生成的文件。
  • 如果您直接从构建 pdf 的服务器/机器上获取文件 - 不是通过浏览器下载,而是简单的文件副本 - Acrobat 还会抱怨吗?

标签: php pdflib


【解决方案1】:

感谢一些支持人员,我找到了一种方法来完成这项工作。像这样在 begin_document() 调用中添加“compatibility=1.4”:

$p->begin_document("", "compatibility=1.4")

解决问题。

根据 pdflib 支持人员的说法,软件版本之间的 PDF 格式发生了很多变化。因此,添加该兼容性指令会强制程序保持 PDF 向后兼容。

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多