2010-03-24 24 views
11

Sembra (almeno questo è la nostra comprensione del problema a questo punto) che data un'immagine di sfondo in BIRT, la routine di generazione di PDF ripete le informazioni sull'immagine all'interno del PDF invece di averlo fatto riferimento una volta come l'immagine di sfondo di tutte le pagine del PDF.Come ridurre la dimensione del PDF generato da BIRT con l'immagine di sfondo?

Ciò fa sì che i PDF PDF generati da BIRT siano troppo grandi. C'è un modo per far sì che BIRT memorizzi l'immagine solo una volta all'interno del PDF e sia l'immagine di sfondo su ogni pagina del PDF mantenendo le dimensioni del file più ragionevoli?

+0

+1 Interessante domanda. Mai notato questo ... – ChristopheD

risposta

7

Sì, BIRT creerà una nuova incarnazione della stessa immagine di sfondo per ogni pagina. Purtroppo questo è troppo profondamente sepolto in org/eclipse/birt/report/engine/emitter/pdf/PDFPage.java per facilmente incidere in giro bene, e sicuramente non è configurabile.

Ma non disperare! È possibile utilizzare iText (lo stesso iText utilizzato internamente da BIRT) su eliminare le entità duplicate con PdfSmartCopy. Qualcosa sulla falsariga di:

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(); 

Se quanto sopra non è accettabile, allora si può cerotto com.itextpdf.text.Image.getInstance(URL) a comportarsi in modo Singleton simile, restituendo un com.itextpdf.text.Image oggetto esistente se l'immagine era già stato ottenuto dal stesso URL in passato. È possibile applicare patch e ricostruire il JAR iText utilizzato da BIRT oppure utilizzare Javassist per eseguire l'iniezione di codice in fase di esecuzione senza necessità di ricompilazione.

+1

Grazie Vlad, PdfSmartCopy è stata una soluzione che ha funzionato bene per noi. – Yishai

Problemi correlati