使用iText调整PDF格式的大小:不兼容的颜色转换

时间:2011-07-26 12:03:33

标签: java colors compression itext

我正在尝试减少Java中几个PDF的文件大小。我找到了一些技巧来做到这一点。但调整图像大小似乎最有效。 我跟着使用iText的this piece of code

它在一些PDF上很好用(从4.5MB减少到800KB!)但有些不受影响。

我按如下方式更改了代码,因此它会接受更多Stream对象(并希望压缩更多):

PdfReader reader = new PdfReader(original.getPath());
int size = reader.getXrefSize();
for(int i=0;i<size;i++){
    PdfObject object = reader.getPdfObject(i);
    if (object == null || !object.isStream())
        continue;
    PRStream stream = (PRStream)object;
        PdfImageObject image = new PdfImageObject(stream);
        try{
        BufferedImage bi = image.getBufferedImage();
        //more stuff here

它确实做到了!有些PDF实际上已经压缩了很多。但是,我得到一个奇怪的例外,根本没有改变:

javax.imageio.IIOException: Incompatible color conversion
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkColorConversion(JPEGImageReader.java:927)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1028)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:984)
    at javax.imageio.ImageIO.read(ImageIO.java:1438)
    at javax.imageio.ImageIO.read(ImageIO.java:1342)
    at com.itextpdf.text.pdf.parser.PdfImageObject.getBufferedImage(PdfImageObject.java:302)
    at com.example.compression.App.main(App.java:56)

(App.java:56是image.getBufferedImage();

的行

一些研究发现,它试图打开的Stream是 CMYK JPG。

我想知道为什么这些不会打开,以及我如何调整这些图像的大小。 感谢

1 个答案:

答案 0 :(得分:1)

BufferedImage本身并不处理CMYK(我不确定Java是否在其他本机组件中执行)。

Java 6 docs中列出的字段中,没有cmyk颜色模型....

你可以看看this site,有人告诉你如何处理BufferedImage和CMYK色彩空间。

祝你好运!