我的php cli应用程序使用TCPDF库创建PDF。在大多数情况下,PDF是成功创建的,但有时创建的PDF会使adobe reader弹出错误:“图像数据不足”。
我显然对此消息进行了一些研究,没有任何指定的原因也没有提供解决方案在我的情况下或解决问题。虽然Adobe产品是唯一会弹出错误的产品,而其他PDF查看器可以打开损坏的文件并将其显示正确,但这并不意味着它与adobe相关的问题。对于高级PDF编辑器,NITRO 9可以显示损坏的文件,但同时会检测到问题并弹出警报。
通过使用Nitro我能够修复PDF文件。步骤是:从pdf中提取损坏的图像对象中的图像,然后用保存的图像替换pdf文件中的图像......
触发错误/警报的特定图像不属于一种类型(f.e.jpg2000)。 BMP,png和GIF也触发了erorr / alert。
我在stackoverflow上读了几个类似的话题,'XOBJECT流'可能会出错?但是,我不知道如何检查这个。
我希望你们其中一个人知道在哪里看。
我也尝试在TCPF表单上查找类似的主题,但是创建者告诉主题启动者这是一个adobe问题或pdf问题,他无法帮助他们。
附加文件 我上传了两个pdf文件:一个是带有错误的“图像”触发错误(naamloos1_bad.pdf),另一个是使用Nitro固定的(naamloos1_fixed.pdf)。您可以下载here
我希望有PDF文件类型知识的人可以比较这些,并让我知道出现问题的详细信息,以便我知道在我的代码和TCPDF库中寻找什么以解决这个问题。
PDF文件中的右下角图像是触发警报/错误的图像。
谢谢!
答案 0 :(得分:3)
好的,至少我发现了一种可以自动化的解决方法。我没有学到更多关于这个问题的内容,但是如果这个话题结束了,人们将来会阅读它,那么它就是:
我正在运行Linux并像这样调用ghostscript:
gs -sDEVICE = pdfwrite -dCompatibilityLevel = 1.7 -dPDFSETTINGS = / printer -dNOPAUSE -dQUIET -dBATCH -dUseCIEColor -sOutputFile = ouput.pdf input.pdf
将修复pdf,以免数据错误消失。 (请注意,设置了一些参数是因为我需要为print创建pdf。如果你不需要它,请将dPDFSETTINGS设置为/ screen,f.e。)
答案 1 :(得分:0)
问题为我解决了:当我使用TCPDF在pdf中添加图像时,当我打开pdf时,我在adobe pdf阅读器上收到了消息“图像数据不足”(但在chrome中可以找到相同的文件)。 我在photoshop中打开相同的图像,但出现错误“坏配置文件icc”
所以我用imagick(stripimage命令)删除了icc配置文件
$sPathImg= 'something.jpg';
$image = new Imagick($sPathImg);
$image->stripImage();
$image->writeImage($sPathImg);
Tadam:当我使用Adobe Reader打开pdf时没有更多错误
答案 2 :(得分:0)
杰罗姆为我提供了答案。
在C#中:
MagickReadSettings settings = new MagickReadSettings();
ImageMagick.MagickImageCollection images = new MagickImageCollection();
images.Read(sourceFile, settings);
images[0].Strip();
images.Write(targetFile);