Sí, BIRT creará una nueva versión de la misma imagen de fondo para cada página. Desafortunadamente, esto está demasiado enterrado en org/eclipse/birt/report/engine/emitter/pdf/PDFPage.java
como para ser manipulado fácilmente, y definitivamente no es configurable.
Pero la desesperación no! Puede usar iText (el mismo iText utilizado internamente por BIRT) a eliminar entidades duplicadas con PdfSmartCopy
. Algo a lo largo de las líneas de:
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();
Si lo anterior no es aceptable, entonces se puede parche com.itextpdf.text.Image.getInstance(URL)
a comportarse de una manera Singleton-como, devolver un com.itextpdf.text.Image
objeto existente si la imagen ya había sido obtenido a partir de la el mismo URL
en el pasado. Puede parchar y reconstruir el iTAR de iText utilizado por BIRT o utilizar Javassist para realizar la inyección de código en tiempo de ejecución sin necesidad de recompilarlo.
+1 Interesante pregunta. Nunca me di cuenta de esto ... – ChristopheD