将色带应用于PDF中的TIFF

将色带应用于PDF中的TIFF,pdf,itext,tiff,afp,Pdf,Itext,Tiff,Afp,•背景: 我们正在开发AFP到PDF的工具。它涉及将AFP(高级函数处理)文件转换为PDF •详细的问题陈述: 我们有嵌入TIFF图像的AFP文件。图像对象在函数集45中描述,有点像这样表示- 我们希望使用Java/iTextAPI将此平铺图像写入PDF。 到目前为止,我们可以编写G4MMR图像。但是,我们无法将CMYK色带数据(蓝色)应用于此图像 •尝试过的解决方案: 编写G4MMR图像的代码如下- ByteArrayOutputStream decode=saveAsTIFF(,);

•背景:

我们正在开发AFP到PDF的工具。它涉及将AFP(高级函数处理)文件转换为PDF

•详细的问题陈述:

我们有嵌入TIFF图像的AFP文件。图像对象在函数集45中描述,有点像这样表示-

我们希望使用Java/iTextAPI将此平铺图像写入PDF。 到目前为止,我们可以编写G4MMR图像。但是,我们无法将CMYK色带数据(蓝色)应用于此图像

•尝试过的解决方案:

编写G4MMR图像的代码如下-

ByteArrayOutputStream decode=saveAsTIFF(,);
RandomAccessFileOrArray ra=新的RandomAccessFileOrArray(saveAsTIFF.toByteArray());
int pages=TiffImage.getNumberOfPages(ra);

对于(int i1=1;i1在将图像添加到PDF文件之前,您需要将CMYK颜色空间添加到图像中。不过,我恐怕这是一个解决方法。
您可以在将图像添加到PDF文件之前将其转换为默认RGB颜色空间,但这可能意味着您的图像会有一些质量损失。

您正在使用的AFP资源这是一张用LZW压缩的TIFF CMYK图像。这张图像还使用了一个用G4MMR(与传统传真样式G4稍有不同的编码)压缩的“透明遮罩”

因此,图像数据已经使用CMYK颜色空间,每个波段(C、M、Y、K)都使用简单的LZW编码单独压缩,提取和存储为基本TIFF CMYK文件应该不会太困难。您还必须将透明掩码转换为G4或原始数据,以便在pdf文件中使用它来制作CMYK图像


如果你想要更好的PDF输出控制,我建议你看看pdflib

如何解密LZW加密的图像?对不起,我说的是LZW加密,而我指的是LZW编码(我编辑了答案)。一个简单的LZW编解码器应该可以。另一个选择是使用libtiff(我不知道是否有java绑定)它公开了TIFFWriteRawStrip方法,允许在不解码的情况下存储每个频带。如果你想这样做,我可以发布一些伪代码

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

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);