FPDF错误:该文档(testcopy.pdf)可能使用了一种不受FPDI免费解析器支持的压缩技术。

37
我运行以下代码时出现了这个错误:FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI. 我使用了另一个名为test.pdf的PDF文件,它可以正常工作,但是在testcopy.pdf中出现了错误。
我认为这是解析器的问题。有人知道可以与fpdf一起使用以避免此错误的其他解析器吗? 我的代码:
require('fpdf17/fpdf.php'); 
require('fpdf17/fpdi.php'); 
// initiate FPDI 
$pdf = new FPDI(); 
while (ob_get_level())
ob_end_clean();
header("Content-Encoding: None", true);
// set the sourcefile 
$pagecount = $pdf->setSourceFile('testcopy.pdf');

我想将pdf拆分为两个pdf,并将这两个pdf附加在文件附件字段中。如何将pdf保存到服务器上?是否可以使用fpdf实现?


我以前没有遇到过这样的问题。顺便说一句,这里有一个类似的问题,可能会有所帮助:https://dev59.com/YlXTa4cB1Zd3GeqP3Jl- - Mukesh Chapagain
1
谢谢..我查了这个问题,但没有帮助我..我想知道是否有任何解析器可以与fpdf一起使用???我认为Fpdi不支持所有类型的pdf格式。 - user851939
9个回答

50

是的,FPDF库仅支持PDF版本1.4及以下。因此,要解决这个问题,请使用GhostScript。该脚本可帮助动态更改PDF版本。

(1) 在此处下载Ghostscript

(2) 安装Ghostscript并定义环境变量PATH。

(3) 然后,使用以下PHP代码更改PDF版本。

shell_exec( "gswin32 -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=".$new_pdf." ".$old_pdf.""); 

(4) 现在我们得到版本为1.4的PDF文件作为输出,然后继续使用FPDF。

享受吧!


1
谢谢!我必须将“gswin32”更改为“gs”,才能使其正常工作。 - Laurie Clark
1
“定义环境变量PATH”是什么意思?谢谢。 - Marsha
@Marsha 这意味着你应该将Ghostscript可执行文件的路径添加到Windows操作系统的PATH变量中。搜索关键词“添加路径到Windows”,它会告诉你如何操作。 - Kevin Florenz Daus
1
这应该被标记为答案,这是我看到的迄今为止最好的尝试。 - nbonniot
1
此链接展示了使用完整的实际例子来完成FPDI PDF解析器支持1.4版本以上的PDF文件的技巧,它可能会对某些人有所帮助:http://www.infoconic.com/blog/trick-for-fpdi-pdf-parser-that-supports-pdf-version-above-1-4/ - Rakibul Haq

25

我遇到了与PDFMerger无法处理某些PDF文件的相同问题。看起来Adobe不断更新pdf扩展的压缩方式。

我在Chrome中找到了解决方案。

1. Open the PDF file(which does not work with PDFMerger) with Chrome
2. Right Click and Print
3. Change destination as [Save as PDF]
4. This exported PDF file is compatible with PDFMerger

我曾经使用Ghostscript来完成这个任务,但这确实更加方便。谢谢! - Matt

16

浏览迄今为止的答案,我无法解决这个问题。以下是原因,您可能也有同样的问题,因此这个答案对您也非常宝贵。

我没有访问Acrobat,因此无法降级原始PDF版本。我也没有购买新版本的库,其中包含升级的加密。

最终,我使用了在线PDF转换器将我的PDF文件降级到版本5(1.4)

如果您找不到一个,这里是一个完整性链接。

https://docupub.com/pdfconvert/

请记住链接的内容可能会改变。


4
应该接受这个答案,这是迄今为止最简单的方法。 - HerrimanCoder
谢谢!你节省了我的时间!最佳答案)) - skywind

15

文件必须是 PDF 1.4(Acrobat 5)或更低版本。如果您拥有 Adobe Acrobat Pro,可以使用“文档”->“减小文件大小”来更改此设置。


6

以下是我从另一个话题中的答案:

“可以通过重新保存模板并更改压缩类型来克服这个问题。 在Adobe Acrobat Pro中,选择文件->另存为->优化PDF->弹出左侧列表 - 清理, 对象压缩选项 -> 更改为“压缩文档结构” -> 点击“确定”以保存。”

参考:使用fpdi编辑受密码保护的pdf


3

GPL Ghostscript 8.70 (2009-07-31) / Centos 7

ghostscript -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -sOutputFile=new_file.pdf file.pdf

1

对于没有Acrobat专业版的用户:

当我尝试使用Office功能保存为PDF时,我在新版本的Word中遇到了这个问题。看起来Office提供的PDF转换工具正在使用更新的格式。以下是我解决它的方法。

  • 安装NitroPDF免费版(可能适用于其他可下载的免费PDF创建者)
  • 进入Word文档并选择“打印”。
  • 在打印选项中,选择“Nitro PDF Creator (Reader 3)”或当前版本。
  • 对话框将打开并允许您选择要保存PDF的位置。

所保存的版本可以被FPDF打开。

希望能有所帮助。


Chrome似乎也可以做同样的事情,打开Google Chrome并将其打印为PDF。 - QuantumBlack

1
在Mac的情况下,您可以在预览中打开PDF文件并选择“导出为PDF”。导出的文件可以随后使用。

0

我曾经遇到和你一样的错误。我的解决方法是将pdf转换为较低的版本,然后一切都按照预期运行。

希望这个简单的技巧能够帮到你!


我知道我之前在询问关于另一个解析器,它可以与支持所有类型版本的fpdf一起使用。 - user851939

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接