7

是否有可以完成这项工作的免费/开源 PDF 解析器?FPDI 附带的免费解析器仅支持最高 1.4 的 PDF 版本。我尝试了 TCPDF,但它没有用。

我知道我可以通过 Acrobat 更改 PDF 文件的 PDF 版本,但我在执行此操作时遇到了错误。

我正在使用 FPDI 为我们公司销售的 PDF 加水印。我注意到我通过 Acrobat 从 1.7 降级到 1.4 的其中一个 PDF 看起来几乎相同,但是在我的水印功能完成后,PDF 将在我的封面页的右侧和底部有空白区域,其背景为黑色。简而言之,在整个过程之后,PDF 看起来不好卖。

4

4 回答 4

6

I hit this same limitation in a project I'm currently working on, and ended up creating my own parser based on TCPDF's parser which works with a modified verision of FPDI called TCPDI and an unmodified copy of FPDF_TPL. It works with TCPDF 6, and supports up to at least PDF 1.6 (I haven't got a 1.7 PDF handy to try, but I'll be hunting one down shortly to make sure it works).

If you're still wanting to do this, please feel free to try out TCPDI / tcpdi_parser - if you encounter any issues, please report them via Github and I'll look into them. Basic installation and usage instructions can be found in the TCPDI README.

于 2013-10-01T02:35:30.880 回答
2

我已经解决了这个限制,方法pdftk是在将 PDF 加载到之前解压缩它FPDI,然后再重新压缩它pdftk

我确实查看了付费许可证,FPDI但在尝试编译和运行评估版时遇到了巨大的困难,并且失去了希望/信心。除了分叉或克隆之外,TCPDI 缺少任何真正的安装路径,而且它们在 PHP 7.4 上看起来充其量都是零散的。

在您的机器上安装pdftk后,该解决方案看起来有点像这样:

$PDF = new Fpdi();
try {
    $PDF->setSourceFile('./pdf.pdf');
} catch (\Exception $exception) {
    if (aBoolFunctionToDetectThisParticularException($exception)) {
        exec('pdftk ./pdf.pdf output ./pdf_expanded.pdf uncompress');
        $PDF->setSourceFile('./pdf_expanded.pdf');
    } else {
        throw $exception;
    }
}

如果您走这条路,重新压缩是个好主意,因为文件大小的差异是巨大的。

exec('pdftk ./pdf_expanded.pdf output ./pdf_compressed.pdf compress');
于 2020-08-12T09:47:22.317 回答
1

FPDI 允许处理最高版本 1.4 的 PDF 文件。在使用 FPDI 处理之前,您可以使用 GHOSTSCRIPT 将任何 PDF 文件转换为 1.4 版。

示例代码可在我的官方网站博客此链接上找到。

更新 -

请立即点击此链接。域名已从 webnius.com 更改为 infoconic.com

于 2018-06-23T15:41:19.340 回答
-2

因为当你在 FPDI 上搜索时,谷歌的结果很高。付费版可以做到1.4以上:

https://www.setasign.com/products/fpdi-pdf-parser/details/

当您喜欢该软件时,购买它不是分配,而是您帮助开发人员。:)

于 2020-01-15T07:24:44.340 回答