gpt4 book ai didi

java - Jasper 报告自定义导出器读取属性

转载 作者:行者123 更新时间:2023-12-01 09:15:03 25 4
gpt4 key购买 nike

我已经为旧版本的 Jasper 编写了一些自定义导出器,但是版本 6 中的更改让我陷入了困境。我已经得到了一个 JasperPrint 对象并且可以遍历报表元素,但是我在报表设计中设置的所有属性都不可用。由于 Jasper 多年来发生了巨大变化,因此搜索示例并没有帮助。

具体来说,我想要完成的是编写一个自定义导出器,该导出器读取 JRXML 中各个元素上设置的属性,并根据这些属性采取操作。我不确定需要采取哪些步骤才能使 JRXML 中的属性可供自定义导出器使用。

我的 jrxml 的片段:

<staticText>
<reportElement uuid="35d904d5-317f-4ea6-9d93-e50e5fc613b9" x="2" y="0" width="100" height="20">
<property name="svg.t.data.ch" value="v"/>
</reportElement>
<textElement/>
<text><![CDATA[Customer Name]]></text>
</staticText>

还有一段简化但实用的代码:

public class CustomExporter extends JRAbstractExporter<ReportExportConfiguration, ExporterConfiguration, ExporterOutput, JRExporterContext>{
...
@Override
public void exportReport() throws JRException {
JRPropertiesMap props = null;
List<ExporterInputItem> items = exporterInput.getItems();

for(ExporterInputItem item : items){
jasperPrint = item.getJasperPrint();
for(JRPrintPage page : jasperPrint.getPages()){
for(JRPrintElement ele : page.getElements()){

switch(ele.getOrigin().getBandTypeValue()){
case COLUMN_HEADER:
case GROUP_HEADER:
case DETAIL:
props = ele.getPropertiesMap();
break;
default:
break;
}
}
}
}
}

JRPropertiesMap 属性始终为 null。

最佳答案

设计(如 JRXML)元素属性不会自动传输到打印元素,您需要配置一个全局属性来指示引擎复制具有给定前缀的属性。

如果您想复制所有 svg.t.* 元素属性,则需要 jasperreports.properties 中的以下属性(或以编程方式设置)

net.sf.jasperreports.print.transfer.foo=svg.t.

您可以有多个 net.sf.jasperreports.print.transfer.* 属性,每个属性都为要复制到打印元素的属性注册一个前缀。

关于java - Jasper 报告自定义导出器读取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40616276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com