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