将pdflib从6升级到9,现在代码会创建损坏的PDF


Upgrade pdflib from 6 to 9, now code creates corrupt PDFs?

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

好吧,程序中使用 PDFlib 创建 PDF 的部分现在制作了 Acrobat 认为"已损坏且无法修复"的 PDF。奇怪的是,Firefox使用Adobe插件打开文件很好。通用的Ubuntu PDF查看器也是如此。但是当我下载PDF并尝试在Acrobat Reader或完整的Acrobat中打开它时,它说该文件已损坏,无法修复。

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

编辑:

好的,我将生成错误PDF的PHP文件剥离为"开始文档","开始页","结束页","结束文档",并且没有错误。然后我添加了其中一个背景图像加载并发现了第一个问题。

$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网站上复制了这段代码,所以我不确定这里发生了什么。

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

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

解决了问题。

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