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でした。
私はこれらが開かない理由と、どうにかこれらのイメージのサイズを変更できるのかと思います。 ありがとう