我已经为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/

10-11 22:28
查看更多