在我的pdf文件中,我添加图片和文字如下:
Image img = Image.getInstance(fileName); // type png or jpg
document.add(img);
Paragraph p = new Paragraph(...);
document.add(p);
我想将其转换为DeviceCMYK模式进行打印。 但在书中说:" iText不会将RGB颜色转换为CMYK"。
那么,如何解决这个问题呢? 必须将每个img,文本转换为CMYK颜色或隐藏所有文件pdf?我在谷歌搜索并找到一些建议: 他们使用lib:Jmagic / JAI ......(ICC Color Profiles)
ICC Color Profiles : http://stackoverflow.com/questions/22298328/convert-rgb-png-to-cmyk-jpeg-using-icc-color-profiles
JAI : http://stackoverflow.com/questions/4472362/how-can-i-convert-an-rgb-image-to-cmyk-and-vice-versa-in-java
你有什么建议吗?
更新1:
我的代码如下:
// PdfContentByte pdfCB = new PdfContentByte(writer);
// read buffer image (png or jpec) from link
BufferedImage rgbImage = ImageIO.read(new URL(imageLink));
BufferedImage cmykImage = null;
ColorSpace cpace = new ICC_ColorSpace(ICC_Profile.getInstance(this.class.getClassLoader()
.getResourceAsStream("OffsetEuroU360K85V25PO4.icc")));
ColorConvertOp op = new ColorConvertOp(rgbImage.getColorModel().getColorSpace(), cpace, null);
cmykImage = op.filter(rgbImage, null);
// write buffered image to local file
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(cmykImage, "jpg", baos);
baos.flush();
byte[] resultImageAsRawBytes = baos.toByteArray();
baos.close();
JAI.create("filestore", cmykImage, "/root/CMYK_IMAGE" + no + ".TIF", "TIFF");
// Add image to document
Image img = Image.getInstance(resultImageAsRawBytes);
// Image img = Image.getInstance(pdfCB, cmykImage, 1);
img.tagICC(com.itextpdf.text.pdf.ICC_Profile.getInstance(PBPMSItextExport.class.getClassLoader()
.getResourceAsStream("OffsetEuroU360K85V25PO4.icc")));
document.add(img);
结果错误:
java.io.IOException: The byte array is not a recognized imageformat.
com.itextpdf.text.Image.getInstance(Image.java:442)
com.itextpdf.text.Image.getInstance(Image.java:348)
但保存在本地文件中的图像是CMYK颜色。
如何通过输入实现iText的实例图像是BufferedImage?
RGB中原始img的链接: http://www.mediafire.com/view/jlbc67q5gs2l3bj/00.png
img的链接被转换并保存到本地: http://www.mediafire.com/view/a8lw5yhlcww9qbm/CMYK_IMAGE3.TIF