Ошибки добавления изображений в pdf с использованием itext 5.5.6 и FullCompression на pdfStamper

На прошлой неделе мы обновили itext 5.3.6 до 5.5.6, во время нашего теста мы обнаружили проблемы с добавлением изображений в существующий PDF-файл с включенным полным сжатием. См. следующий пример кода:

  try {

    byte[] imageByte = IOUtils.toByteArray(new FileInputStream("imageToStamp.png"));
    InputStream input = new FileInputStream("originalFile.pdf");
    byte[] inputBytes = IOUtils.toByteArray(input);
    OutputStream output = new FileOutputStream("originalFileStamped.pdf");
    PdfReader pdfReader = new PdfReader(new ByteArrayInputStream(inputBytes));
    PdfStamper pdfStamper = new PdfStamper(pdfReader,output);
  Image image = Image.getInstance(imageByte);
  for(int i=1; i<= pdfReader.getNumberOfPages(); i++){
      PdfContentByte content = pdfStamper.getUnderContent(i);
      image.setAbsolutePosition(100f, 700f);
      content.addImage(image);
  }
  //Full Compresión breaks the final pdf , if you comment that line the final PDF will had the images.
  pdfStamper.setFullCompression();
  pdfStamper.close();
} catch (IOException e) {
  e.printStackTrace();
} catch (DocumentException e) {
  e.printStackTrace();
}

Если мы используем FullCompression для штампа в формате PDF после добавления любого изображения, результирующий файл будет поврежден, и изображения не появятся на нем.

С другой стороны, если мы не используем FullCompression, файл будет правильным со штампованными изображениями.

Есть ли способ использовать fullCompresion в pdfStamper в pdf с добавленными изображениями?

Спасибо за чтение


person user3801404    schedule 27.08.2015    source источник


Ответы (1)


Переместите эту строку вверх:

PdfStamper.setFullCompression();

Убедитесь, что этот метод используется сразу после создания экземпляра PdfStamper, и проблема будет решена.

person Bruno Lowagie    schedule 28.08.2015
comment
Возможно, стоит подумать о том, чтобы PdfStamper.setFullCompression() выбрасывал IllegalStateException, если использовать его слишком поздно. - person mkl; 28.08.2015