Maa*_*zer 5 php pdf image tcpdf
我的 php cli 应用程序使用 TCPDF 库创建 PDF。在大多数情况下,PDF 会成功创建,但有时创建的 PDF 会使 adobe reader 弹出错误:“图像数据不足”。
显然,我对此消息进行了一些研究,并且没有任何指定的原因或提供的解决方案与我的情况相关或解决问题。尽管 Adobe 产品是唯一会弹出错误的产品,并且其他 PDF 查看器可以打开损坏的文件并正确显示,但这并不意味着这是与 adobe 相关的问题。对于高级 PDF 编辑器,NITRO 9 可以显示损坏的文件,但同时确实检测到问题并弹出警报。
通过使用 Nitro,我可以修复 PDF 文件。步骤是:从pdf中损坏的图像对象中提取图像,然后用保存的图像替换pdf文件中的图像...
触发错误/警报的特定图像不是一种类型(fe jpg2000)。BMP、png 和 gifs 也触发了错误/警报。
我在 stackoverflow 上读到一些类似的主题,“XOBJECT 流”可能格式不正确?但是,我不知道如何检查这一点。
我希望你们中的一个人知道在哪里看。
我也试图在 TCPF 表单上寻找类似的主题,但创建者告诉主题初学者这是一个 adobe 问题或 pdf 问题,他无法帮助他们。
附加文件 我上传了两个 pdf 文件:一个带有损坏的“图像”,会触发错误 (naamloos1_bad.pdf),另一个使用 Nitro 修复 (naamloos1_fixed.pdf)。你可以在这里下载它们
我希望了解 PDF 文件类型的人可以比较这些并让我知道发生了什么问题的详细信息,以便我知道在我的代码和 TCPPDF 库中寻找什么来解决这个问题。
PDF 文件中右下角的图像是触发警报/错误的图像。
谢谢!
问题为我解决了:当我使用 TCPDF 在 pdf 中添加图像时,当我打开 pdf 时,我在 adobe pdf reader 上收到消息“图像数据不足”(但在 chrome 中相同的文件没问题)。我在 Photoshop 中打开同一张图像,但出现错误“bad profile icc”
所以我用imagick(stripimage命令)删除icc配置文件
$sPathImg= 'something.jpg';
$image = new Imagick($sPathImg);
$image->stripImage();
$image->writeImage($sPathImg);
Run Code Online (Sandbox Code Playgroud)
Tadam:当我用 adobe reader 打开 pdf 时不再出现错误
好吧,至少我找到了一个可以自动化的解决方法。我对这个问题一无所知,但如果这个话题最终死了并且人们将来会读到它,这里是:
我运行 Linux 并像这样调用 Ghostscript:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.7 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -dUseCIEColor -sOutputFile=ouput.pdf input.pdf
将以这样的方式修复pdf,数据不足的错误就会消失。(请注意,设置了一些参数,因为我需要创建用于打印的 pdf。如果不需要,请将 dPDFSETTINGS 设置为 /screen, fe)