使用 BIRT API 有没有办法降低PDF报告的边距?
我尝试将 PDF呈现选项设置为:
PDFRenderOption renderOption = new PDFRenderOption();
renderOption.setOutputFormat(PDFRenderOption.OUTPUT_FORMAT_PDF);
renderOption.setOption(IPDFRenderOption.PDF_HYPHENATION, true);
renderOption.setOption(IPDFRenderOption.PDF_TEXT_WRAPPING, true);
renderOption.setOption(IPDFRenderOption.PAGE_OVERFLOW,
IPDFRenderOption.ENLARGE_PAGE_SIZE);
基本上我遇到的问题是,如果我在一个列中有一个较长的文本(来自其中一个表),它将在下一行获得它,但如果我将IPDFRenderOption.PDF_HYPHENATION
设置为{{1}我将在文本中间分割文本(见下文)。
false
设置为IPDFRenderOption.PDF_HYPHENATION
true
设置为IPDFRenderOption.PDF_HYPHENATION
所以,我试图将PDF的边距设置得更小以克服这个问题,但我没有找到任何关于如何使用BIRT API执行此操作的文档... 有this suggestion修改母版页,但我有太多报告要手工修改它们。
我该如何处理这个问题?甚至可以使用BIRT API吗?
答案 0 :(得分:2)
我需要做的就是遍历所有句柄,测试哪一个是MasterPageHandle
并使用这些键调用setProperty
:
MasterPageHandle.BOTTOM_MARGIN_PROP
MasterPageHandle.LEFT_MARGIN_PROP
MasterPageHandle.RIGHT_MARGIN_PROP
MasterPageHandle.TOP_MARGIN_PROP
和我需要的DimensionValue
。
@SuppressWarnings("unchecked")
private void shrinkPageSizeForExport(IReportRunnable reportRunnable) {
DesignElementHandle designHandle = reportRunnable.getDesignHandle();
IElementDefn elementDefn = designHandle.getDefn();
for (int i = 0; i < elementDefn.getSlotCount(); i++) {
SlotHandle slotHandle = designHandle.getSlot(i);
for (DesignElementHandle elementHandle: (List<DesignElementHandle>)slotHandle.getContents()) {
if (!(elementHandle instanceof MasterPageHandle)) continue;
MasterPageHandle mph = (MasterPageHandle)elementHandle;
DimensionValue dv = new DimensionValue(0.1, "cm");
setAllMarginsTo(mph, dv);
}
}
}
private void setAllMarginsTo(MasterPageHandle mph, DimensionValue dv) {
try {
mph.setProperty(MasterPageHandle.BOTTOM_MARGIN_PROP, dv);
mph.setProperty(MasterPageHandle.LEFT_MARGIN_PROP, dv);
mph.setProperty(MasterPageHandle.RIGHT_MARGIN_PROP, dv);
mph.setProperty(MasterPageHandle.TOP_MARGIN_PROP, dv);
} catch (SemanticException se) {
throw new RuntimeException("Cannot set margins for report export!", se);
}
}
答案 1 :(得分:2)
替代建议:
在BIRT库中构建MasterPage,并在所有报告中使用它。然后,可以一次更新所使用的所有报告。如果您没有使用库MasterPages,则可以使用库母版页替换报告MasterPage,然后再尝试重新编码它们。
像DataSources和MasterPages这样的东西几乎总是作为库项目更好。