Я пытаюсь уменьшить размер файлов нескольких PDF-файлов на Java. Я нашел несколько методов, чтобы сделать это. Но изменение размеров изображений кажется наиболее эффективным.
Я следовал этой части кода , которая использует iText.
Отлично работает на нескольких PDF (сокращение с 4,5 МБ до 800 КБ!), Но некоторые остались без изменений.
Я немного изменил код следующим образом, чтобы он принимал больше объектов 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();
)
Некоторые исследования обнаружили, что поток, который он пытался открыть, был CMYK JPG.
Мне интересно, почему они не открываются, и как я могу изменить размеры этих изображений в любом случае.
Спасибо