如何减少BIRT生成PDF与背景图像的大小?
看起来(至少这是我们对此问题的理解),给定BIRT中的背景图像,PDF生成例程重复PDF内的图像信息,而不是将其一次引用为所有页面的背景图像的PDF。如何减少BIRT生成PDF与背景图像的大小?
这会导致我们的BIRT生成的PDF太大。有没有办法让BIRT只将图像一次存储在PDF中,并将其作为PDF每页上的背景图像,同时保持文件大小更合理?
是的,BIRT将为每个页面创建一个相同背景图像的新化身。不幸的是,这太深埋在org/eclipse/birt/report/engine/emitter/pdf/PDFPage.java
中,很容易破解,而且绝对不可配置。
但绝望不!您可以使用iText(与BIRT内部使用相同的iText)到消除与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
。您可以修补和重建BIRT使用的iText JAR,或使用Javassist在运行时执行代码注入,而无需重新编译。
感谢弗拉德,PdfSmartCopy是一种解决方法,对我们来说效果很好。 – Yishai 2010-04-02 04:02:58
+1有趣的问题。从来没有注意到这个... – ChristopheD 2010-03-24 22:40:39