【问题标题】:'insufficient data for an image' message when opening PDF打开 PDF 时出现“图像数据不足”消息
【发布时间】:2014-09-17 06:05:18
【问题描述】:

我的 php cli 应用程序使用 TCPDF 库创建 PDF。在大多数情况下,PDF 会成功创建,但有时创建的 PDF 会导致 adobe reader 弹出错误:'insufficient data for an image'。

我显然对这条消息进行了一些研究,但没有任何命名的原因或提供的解决方案与我的情况相关或解决问题。虽然 Adob​​e 产品是唯一会弹出错误的产品,并且其他 PDF 查看器可以打开损坏的文件并正确显示,但这并不意味着它是与 adobe 相关的问题。对于高级 PDF 编辑器,NITRO 9 可以显示损坏的文件,但同时会检测到问题并弹出警报。

通过使用 Nitro,我能够修复 PDF 文件。步骤是:从pdf中提取损坏的图像对象中的图像,然后将pdf文件中的图像替换为保存的图像...

触发错误/警报的特定图像不是一种类型(例如 jpg2000)。 BMP、png 和 gif 也触发了错误/警报。

我在 stackoverflow 上的一些类似主题中读到“XOBJECT 流”可能格式不正确?但是,我不知道如何检查。

我希望你们中的一个人知道去哪里找。

我也尝试在 TCPF 表单上寻找类似的主题,但创建者告诉主题启动者这是一个 adobe 问题或 pdf 问题,他无法帮助他们。

附加文件 我上传了两个 pdf 文件:一个带有损坏的“图像”,会触发错误 (naamloos1_bad.pdf),另一个是使用 Nitro 修复的 (naamloos1_fixed.pdf)。你可以下载它们here

我希望了解 PDF 文件类型的人可以比较这些并让我知道发生了什么问题的详细信息,以便我知道在我的代码和 TCPDF 库的代码中寻找什么来解决这个问题。

PDF 文件中右下角的图像是触发警报/错误的图像。

谢谢!

【问题讨论】:

    标签: php image pdf tcpdf


    【解决方案1】:

    问题为我解决了:当我使用 TCPDF 在 pdf 中添加图像时,当我打开我的 pdf 时,我在 adobe pdf 阅读器上收到“图像数据不足”的消息(但相同的文件在 chrome 中是可以的)。 我在 Photoshop 中打开相同的图像时出现错误“错误的配置文件 icc”

    所以我用 imagick 删除 icc 配置文件(stripimage 命令)

    $sPathImg= 'something.jpg';
    $image = new Imagick($sPathImg);
    $image->stripImage();
    $image->writeImage($sPathImg);
    

    Tadam : 当我用 adobe reader 打开我的 pdf 时不再出错

    【讨论】:

      【解决方案2】:

      好的,至少我找到了一种可以自动化的解决方法。我对这个问题一无所知,但万一这个话题结束了,人们将来会读到它,这里是:

      我正在运行 Linux 并像这样调用 ghostscript:

      gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.7 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -dUseCIEColor -sOutputFile=ouput.pdf input.pdf

      将以这种方式修复 pdf,使数据不足错误消失。 (请注意,设置了一些参数,因为我需要创建用于打印的 pdf。如果您不需要它,请将 dPDFSETTINGS 设置为 /screen,f.e.)

      【讨论】:

      • 谢谢!这节省了我的时间。
      • 你有没有发现是什么导致了这个问题?
      【解决方案3】:

      杰罗姆为我解答。

      在 C# 中:

      MagickReadSettings settings = new MagickReadSettings();
      
      ImageMagick.MagickImageCollection images = new MagickImageCollection();
      
      images.Read(sourceFile, settings);
      
      images[0].Strip();
      
      images.Write(targetFile);
      

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2012-03-18
        • 2015-08-13
        • 2013-01-31
        • 2021-08-06
        • 1970-01-01
        • 2019-06-21
        相关资源
        最近更新 更多