Как уменьшить размер сгенерированного BIRT PDF с фоновым изображением?

Кажется (по крайней мере, таково наше понимание проблемы на данный момент), что при наличии фонового изображения в BIRT процедура создания PDF-файла повторяет информацию об изображении внутри PDF-файла вместо того, чтобы ссылаться на него как на фоновое изображение всех страниц документа. PDF.

Это приводит к тому, что созданные BIRT PDF-файлы становятся слишком большими. Есть ли способ заставить BIRT сохранять изображение только один раз внутри PDF-файла и сделать его фоновым изображением на каждой странице PDF-файла, сохраняя при этом более разумный размер файла?


person Yishai    schedule 24.03.2010    source источник
comment
+1 Интересный вопрос. Сам никогда этого не замечал...   -  person ChristopheD    schedule 25.03.2010


Ответы (1)


Да, BIRT создаст новое воплощение одного и того же фонового изображения для каждой страницы. К сожалению, это слишком глубоко спрятано в org/eclipse/birt/report/engine/emitter/pdf/PDFPage.java, чтобы его можно было легко взломать, и, безусловно, его нельзя настроить.

Но не отчаивайтесь! Вы можете использовать iText (тот же iText, который используется внутри BIRT) для удаления повторяющихся объектов с помощью PdfSmartCopy. Что-то вроде:

PdfReader reader  = new PdfReader(PDF_IN_FROM_BIRT);
Document document = new Document();
PdfSmartCopy copy = new PdfSmartCopy(document,
  new FileOutputStream(PDF_OUT_NO_DUPLICATES));
document.open();
for (int page = 1; page <= reader.getNumberOfPages(); page++) {
  copy.addPage(copy.getImportedPage(reader, page));
}
document.close();

Если вышеуказанное неприемлемо, вы можете исправить com.itextpdf.text.Image.getInstance(URL), чтобы он вел себя как синглтон, возвращая существующий объект com.itextpdf.text.Image, если изображение уже было получено из того же URL в прошлом. Вы можете исправить и перестроить JAR-файл iText, используемый BIRT, или использовать Javassist для внедрения кода во время выполнения без необходимости перекомпиляции.

person vladr    schedule 28.03.2010
comment
Спасибо, Влад, PdfSmartCopy был обходным решением, которое хорошо сработало для нас. - person Yishai; 02.04.2010