2010-03-24 19 views
11

Parece que, al menos en este punto, al tener una imagen de fondo en BIRT, la rutina de generación de PDF repite la información de la imagen dentro del PDF en lugar de hacer que una vez se haga referencia como imagen de fondo de todas las páginas del PDF.Cómo reducir el tamaño del PDF generado por BIRT con la imagen de fondo?

Esto hace que nuestros PDF generados BIRT sean demasiado grandes. ¿Hay alguna manera de hacer que BIRT solo almacene la imagen una vez dentro del PDF y que sea la imagen de fondo en cada página del PDF mientras se mantiene el tamaño del archivo más razonable?

+0

+1 Interesante pregunta. Nunca me di cuenta de esto ... – ChristopheD

Respuesta

7

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

Gracias Vlad, PdfSmartCopy fue una solución que funcionó bien para nosotros. – Yishai

Cuestiones relacionadas