Замена изображения с помощью PDFBox не меняет размер PDF в соответствии с изображением

Я использую PDFBox 2.0.8 для замены изображения в моем приложении. Я могу извлечь изображение и заменить его другим изображением того же размера. Однако при уменьшении размера изображения размер PDF не уменьшается. Например, обратитесь к документам / изображениям по ссылкам ниже. Оригинальный размер PDF составляет 93 КБ. Извлеченное изображение составляет 91 КБ. Заменено изображение размером 54 КБ. Размер PDF после замены изображения остается 92 КБ....

  1. Оригинальный документ = http://35.200.192.44/download?fileName=/outbox/pdf/10_cert.pdf
  2. Извлеченное изображение = http://35.200.192.44/download?fileName=/outbox/pdf/image0.jpg
  3. Сменное изображение = http://35.200.192.44/download?fileName=/outbox/pdf/image1.jpg
  4. PDF после замены = http://35.200.192.44/download?fileName=/outbox/pdf/10_cert1.pdf.

Изменение размера PDF после замены не в той же пропорции... Фрагмент кода, используемый для замены изображения,

BufferedImage buffered_replacement_image_file = ImageIO.read(new File(replacement_image_file));
PDImageXObject replacement_img = JPEGFactory.createFromImage(doc, buffered_replacement_image_file);
resources.put(xObjectName, replacement_img);

1 ответ

Изображения в двух ваших PDF-файлах идентичны. Скорее всего, это связано с тем, как вы загружаете данные изображения, сначала создавая BufferedImage из файла, а затем создать PDImageXObject От этого BufferedImage, Это приводит к тому, что данные входного изображения расширяются до простого растрового изображения, а затем повторно сжимаются в JPEG идентично JPEGFactory.createFromImage,

Чтобы использовать данные JPEG такими, какими они изначально являются, попробуйте этот подход:

PDImageXObject replacement_img = JPEGFactory.createFromStream(doc, new FileInputStream(replacement_image_file));
resources.put(xObjectName, replacement_img);

или, если replacement_image_file не обязательно файл JPEG, как это

PDImageXObject replacement_img = PDImageXObject.createFromFileByExtension(new File(replacement_image_file), doc);
resources.put(xObjectName, replacement_img);

Если это не поможет, скорее всего, у вас есть другие проблемы в вашем коде, и вам нужно показать их больше.

Другие вопросы по тегам