• 背景 :
我们正在开发法新社到PDF工具。它涉及将AFP(高级功能处理)文件转换为PDF。
• 详细问题陈述:
我们有带有嵌入式TIFF图像的AFP文件。图像对象在函数集 45 中描述,表示得有点像这样 -
Image Content Begin Tile Image Encoding Parameter – TIFF LZW Begin Transparency Mask Image Encoding Parameter – G4MMR Image Data Elements End Transparency Mask Image Data Elements (IDE Size 32) – 4 bands: CMYK End Tile End Image Content
我们希望使用 Java/iText API 将此平铺图像写入 PDF。截至目前,我们可以编写G4MMR图像。但是,我们无法将 CMYK 色带数据(蓝色)应用于此图像。
• 尝试的解决方案:
编写 G4MMR 图像的代码如下 –
saveAsTIFF方法在这里给出 –http://www.jpedal.org/PDFblog/2011/08/ccitt-encoding-in-pdf-files-converting-pdf-ccitt-data-into-a-tiff/如前所述,我们无法将 CMYK 4 波段图像颜色数据应用于此 G4MMR 图像。ByteArrayOutputStream decode = saveAsTIFF(<width>,<height>,<imageByteData>); RandomAccessFileOrArray ra=new RandomAccessFileOrArray(saveAsTIFF.toByteArray()); int pages = TiffImage.getNumberOfPages(ra); for(int i1 = 1; i1 <= pages; i1++){ img1 = TiffImage.getTiffImage(ra, i1); } img1.scaleAbsolute(256, 75); document.add(img1);
• 技术堆栈,每个组件的版本:
1. JDK 1.6
2. itextpdf-5.1
- 乌梅什·帕塔克
您显示的 AFP 资源是使用 LZW 压缩的 TIFF CMYK 图像。此图像还使用"透明蒙版",该蒙版使用G4MMR压缩(与传统传真样式G4的编码略有不同)。
因此,图像数据已经在使用CMYK色彩空间,每个波段(C,M,Y,K)使用简单的LZW编码单独压缩,并且提取和存储为基本TIFF CMYK文件应该不会太困难。您还必须将透明度蒙版转换为 G4 或原始数据,以便在 pdf 文件中使用它来制作 CMYK 图像。
如果你想要更好的PDF输出控制,我建议你看看pdflib
将 CMYK 色彩空间添加到图像,然后再将其添加到 PDF 文件。但是,恐怕iText可能不完全支持此功能。
您的解决方法可能是在将图像添加到 PDF 文件之前将图像转换为默认的 RGB 色彩空间,但这可能意味着图像会有一些质量损失。