是的,BIRT将为每个页面创建一个相同背景图像的新化身。不幸的是,它埋得太深了
org/eclipse/birt/report/engine/emitter/pdf/PDFPage.java
很容易破解,而且是绝对不可配置的。
但绝望不是!你可以使用
iText
(birt内部使用的相同itext)to
消除重复实体
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
在运行时执行代码注入而不需要重新编译。