Yis*_*hai 11 pdf-generation birt
在BIRT中给出背景图像时,似乎(至少这是我们对此问题的理解),PDF生成例程重复PDF中的图像信息,而不是将其作为所有页面的背景图像引用. 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();
Run Code Online (Sandbox Code Playgroud)
如果上述情况不可接受,那么您可以修补com.itextpdf.text.Image.getInstance(URL)以类似单身的方式运行,com.itextpdf.text.Image如果图像已经从URL过去的相同位置获取,则返回现有对象.您可以修补和重建BIRT使用的iText JAR,或使用Javassist在运行时执行代码注入,而无需重新编译.