2011-07-26 18 views
2

JavaでいくつかのPDFのファイルサイズを縮小しようとしています。私はこれを行うためのいくつかのテクニックを見つけました。しかし、画像のサイズ変更が最も効果的です。 私はiTextを使用するthis piece of codeに続きました。iTextを使用してPDFでイメージのサイズを変更する:互換性のない色変換

これは、いくつかのPDFファイル(4.5MBから800KBへの削減)でもうまくいきますが、影響を受けていないものもあります。

次のように、それはより多くのストリームオブジェクトを受け入れる(そして、できればもっと圧縮)ですので、私は、コードを少し変更:

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();を言うラインである)

発見いくつかの研究、それはしようとしていたストリームを:しかし、私は全く変化しなかったいくつかの奇妙な例外が発生しました開くにはCMYK JPGでした。

私はこれらが開かない理由と、どうにかこれらのイメージのサイズを変更できるのかと思います。 ありがとう

答えて

1

BufferedImageはCMYKをnativally扱っていません(とにかくJavaが他のネイティブコンポーネントで動作するかどうかはわかりません)。 Java 6 docsに表示されたフィールドに

は、何のCMYKカラーモデルがありません....

あなたはthis siteを見てとることができ、誰かがBufferedImageのとCMYKカラースペースに対処する方法を説明します。

幸運を祈る!

関連する問題