是否有可以完成这项工作的免费/开源PDF解析器? FPDI附带的免费解析器仅支持1.4版本的PDF版本。我尝试过TCPDF,但它没有用。
我知道我可以通过Acrobat更改PDF文件的PDF版本,但我遇到过这样做的错误。
我正在使用FPDI为我们在公司销售的PDF打印水印。我注意到其中一个PDF从1.7开始降级到1.4通过Acrobat看起来几乎相同但在我的水印功能完成后,PDF将在我的封面的右下部分有一个黑色背景的白色空格。简而言之,PDF在整个过程之后看起来很糟糕。
答案 0 :(得分:5)
我在目前正在处理的项目中遇到了同样的限制,并最终创建了基于TCPDF解析器的自己的解析器,该解析器使用名为TCPDI的FPDI的修改版本和未修改的FPDF_TPL副本。它适用于TCPDF 6,并且至少支持PDF 1.6(我还没有得到1.7 PDF方便试用,但我很快会找到一个以确保它有效)。
如果您仍然想要这样做,请随时试用TCPDI / tcpdi_parser - 如果您遇到任何问题,请通过Github和我报告看看他们。可以在TCPDI README。
中找到基本安装和使用说明答案 1 :(得分:0)
FPDI允许处理1.4版以下的PDF文件。您可以使用GHOSTSCRIPT将任何PDF文件转换为1.4版,然后再使用FPDI处理它。
代码在that link上可用。
答案 2 :(得分:0)
由于在FPDI上进行搜索时Google搜索结果较高。 付费版本可以做到1.4以上:
https://www.setasign.com/products/fpdi-pdf-parser/details/
当您喜欢该软件时,就不会分配它,而您会帮助开发人员。 :)
答案 3 :(得分:0)
我通过使用pdftk
解压缩PDF之前将其加载到FPDI
中,然后再用pdftk
重新压缩来解决了这一限制。
我确实研究了FPDI
的付费许可证,但是在尝试编译并让评估版运行时非常费劲,并且失去了希望/信心。 TCPDI除了派生或克隆外,没有任何实际的安装路径,并且它们似乎在PHP 7.4上似乎都是修补程序。
installed pdftk
on your machine完成后,解决方案看起来像这样:
$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');