'图片数据不足'打开PDF时的消息

时间:2014-07-25 11:32:23

标签: php image pdf tcpdf

我的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文件中的右下角图像是触发警报/错误的图像。

谢谢!

3 个答案:

答案 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);