【发布时间】:2017-08-17 03:04:05
【问题描述】:
尝试使用 itext 7 将图像添加到 PDF 时,出现以下错误: (部分图片出现此错误。我可以成功写入其他图片。)
ERROR 4868com.itextpdf.io.IOException: ICC profile contains 1 components, while the image data contains 3 components.
at com.itextpdf.io.color.IccProfile.getInstance(IccProfile.java:90)
at com.itextpdf.io.image.JpegImageHelper.processParameters(JpegImageHelper.java:370)
at com.itextpdf.io.image.JpegImageHelper.processImage(JpegImageHelper.java:142)
at com.itextpdf.io.image.ImageDataFactory.createImageInstance(ImageDataFactory.java:524)
at com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:101)
at com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:121)
at com.itextpdf.io.image.ImageDataFactory.create(ImageDataFactory.java:131)
下面是我使用的代码:
Cell cell = new Cell(1, 1);
Image image = new Image(ImageDataFactory.create(photoLocation));
image.setWidth(58);
image.setHeight(58f);
cell.add(image);
用于 iText5 的相同图像。
【问题讨论】:
-
根本原因很可能是图像包含详细说明 3 个组件的 ICC 配置文件,但图像本身是灰度的。很可能是由于图像被转换为灰度并且转换程序没有修改配置文件。在 iText5 中会进行检查,但无论如何都会添加图像。修复源图像可能是最干净的解决方案
-
@Samuel Huylebroeck 我使用 imagemagick 来校正图像。它适用于大多数图像(3035 张图像中的 3003 张图像)。但是对于某些图像(准确地说是 32 个),即使在使用 imagemagick 之后,我仍然会遇到同样的错误。当我在这 32 个图像上使用 imagemagick 的转换命令时,命令运行没有任何错误。我该如何修复这些图像。
-
没有线索,至少没有访问相关图像的权限。我建议从视觉和结构上检查它们,以了解它们与转换工作的图像有何不同。