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

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

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

11
задан Yishai 24 March 2010 в 22:38
поделиться

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 в прошлом. Вы можете исправить и перестроить iText JAR, используемый BIRT, или использовать Javassist для внедрения кода во время выполнения без необходимости перекомпиляции.

7
ответ дан 3 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: