使用Zend_Pdf编辑版本高于1.4的pdf

时间:2012-03-19 17:39:17

标签: php zend-framework zend-pdf

我有一个应用程序,它将一些数据添加到现有的pdf文件中,并将其另存为另一个pdf文件。对于编辑,我使用的是Zend Framework的一部分,Zend_Pdf,但它不适用于版本大于1.4的pdf,但我需要编辑的pdf文件有时比1.4更高版本。我找不到任何可以直接在这个PHP应用程序中解决这个问题的解决方案。那么你知道一些解决方案可以正常工作吗?

当我尝试编辑更高版本时显示此错误:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'PDF file syntax error. Offset - 0x1BC36D. Wrong W dictionary entry. Only type field of stream entries has default value and could be zero length.' in E:\*****Parser.php:236
Stack trace: 
#0 E:\*****Parser.php(460): Zend_Pdf_Parser->_loadXRefTable('1819501')
#1 E:\*****Pdf.php(318): Zend_Pdf_Parser->__construct('./sources/978-8...', Object(Zend_Pdf_ElementFactory_Proxy), true)
#2 E:\*****Pdf.php(267): Zend_Pdf->__construct('./sources/978-8...', NULL, true)
#3 E:\*****pdf.php(21): Zend_Pdf::load('./sources/978-8...')
#4 E:\*****TestApp.php(54): pdf->pdfLoader()
#5 {main} thrown in E:\*****Parser.php on line 236

1 个答案:

答案 0 :(得分:2)

在PDF版本1.5中,PDF文件中对象的引用已更改。只要版本1.5中的PDF文件没有以兼容的方式保存(除了新版本之外使用旧版本1.4引用),不能理解PDF版本1.5的应用程序无法分析文档的结构

据我所知,Zend_Pdf只能理解PDF up to version 1.4,目前有no intention to change that(在Zend-Framwork 1中)。所以没有机会与Zend_Pdf合作。

FPDI等其他库可能能够读取这些文档,但这需要完全重写代码。

其他一些PDF库(如PDFlib)无法更改现有的PDF文件。他们可以创建新的部件并集成现有部件(最高版本1.7),但无法更改现有文件。

很抱歉,但在我看来唯一的解决方案是避免使用高于1.4版的PDF文件。或者,当为Zend_Framework 2重写Zend_Pdf时,它允许操纵更高版本的PDF文件。