Да, 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 для выполнения внедрения кода во время выполнения без необходимости перекомпиляции.