我为旧版本的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道具始终为空。
答案 0 :(得分:1)
设计(如在JRXML中)元素属性不会自动传输到打印元素,您需要配置一个全局属性来指示引擎复制具有给定前缀的属性。
如果您希望复制所有svg.t.*
元素属性,则需要在jasperreports.properties中使用以下属性(或以编程方式设置)
net.sf.jasperreports.print.transfer.foo=svg.t.
您可以拥有多个net.sf.jasperreports.print.transfer.*
属性,每个属性都会为要复制到打印元素的属性注册前缀。