예, 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을 사용하여 재 컴파일 할 필요없이 런타임에 코드 삽입을 수행 할 수 있습니다.
+1 흥미로운 질문입니다. 이 사실을 결코 알지 못했습니다 ... – ChristopheD