13

我正在尝试将现有 PDF(以其他方式创建)添加到使用 FPDI 使用 FPDF 创建的 PDF。它似乎适用于大多数 PDF,但我收到以下错误:

FPDF error: Unable to find xref table.

经过一些测试,我发现如果我使用 1.4 或更低版本(Acrobat v5 或更低版本)的 PDF 版本,它似乎可以工作。查看文件似乎是因为 PDF 格式不同。

有解决方法或解决方案吗?我可能有 10 000 多个用户上传的 PDF,其中一些是新的,有些不是。FPDI 只是死掉而不是导致某种错误甚至返回 false 也很烦人

我现在能想到的唯一解决方案是解析 PDF 文件的第一行以确定版本,并且只添加那些可以工作的版本。

编辑:

我也在 Zend_Pdf 中进行了尝试,使用 Zend 框架附带的演示文件得到了以下结果:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cross-reference streams are not supported yet.' in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php:331
Stack trace:
#0 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php(455): Zend_Pdf_Parser->_loadXRefTable('116')
#1 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(297): Zend_Pdf_Parser->__construct('/Volumes/Docume...', Object(Zend_Pdf_ElementFactory_Proxy), true)
#2 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(250): Zend_Pdf->__construct('/Volumes/Docume...', NULL, true)
#3 /Volumes/Documents/temp/ZendFramework-1.7.7/demos/Zend/Pdf/demo.php(37): Zend_Pdf::load('/Volumes/Docume...')
#4 {main}
  thrown in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php on line 331

是否无法解析大于 1.4 的 PDF?

4

7 回答 7

19

您可以将 FPDI 与 TCPDF 一起使用,它将生成和读取(使用 FPDI)1.7 版 PDF。

请参阅PDF 的 TCPDF-PHP 类


编辑

我最近遇到了在 FPDI 和 TCPDF 中使用各种版本和格式的 PDF 的问题,我可以确认 1.4 以上的 PDF 版本是命中注定的,有趣的是我有很多工作的 1.7 PDF,并且在 1.5 和 1.6 上工作大约 50/50。

我通过使用 GhostScript 将所有不可用的 PDF 文件转换为 v1.4 来解决这个问题,您可以exec从命令行中使用它。ps2pdf14从 GhostScriptlib文件夹中使用。

于 2009-07-23T23:41:43.310 回答
6

我刚刚发布了一对项目(TCPDI / tcpdi_parser,分别基于 FPDI 和 tcpdf_parser ),它们与 TCPDF 6(和 FPDF_TPL)一起使用以导入高于 v1.4 的 PDF(到目前为止已测试到 1.6,但我会一旦我找到一个 1.7 PFD 来测试它,请确保它与 1.7 一起工作!)不需要任何商业插件。基本的安装和使用说明可以在TCPDI README中找到;请随时尝试并通过 Github 跟踪器报告任何问题。

于 2013-10-01T02:45:59.507 回答
4

Setasign 提供 PDF 解析器作为 FPDI 的商业插件。到目前为止,使用新的解析器解析 PDF 文件直到 1.7 版都没有问题。

于 2009-11-27T10:26:39.160 回答
4

我发现使用商业版的FPDI PDF-Parser解决了我的问题。我已经使用它一年了,没有任何它无法解析的 PDF(除非 PDF 已损坏或发生其他奇怪的事情)。

于 2011-02-13T05:30:20.500 回答
3

对于 symfony,我使用这个库转换 >1.4 https://packagist.org/packages/xthiago/pdf-version-converter

于 2016-02-19T10:39:30.033 回答
1

如果您有 Acrobat PDF writer,您可以操作作业设置以使您正在打印/保存的 PDF 与 PDF 1.4 兼容。由于我需要这个产品的微小原因,花 100 欧元来获得与 1.4 以上版本兼容的商业版本似乎不值得。

于 2014-01-23T00:52:57.193 回答
-1

我的团队已经删除了部分代码。我们阻止了代码向 pdf 添加水印。这为我们解决了问题。PDF >= 1.5

于 2012-04-05T07:54:52.773 回答