繁体   English   中英

带有多个子报表的Jasper报表

[英]Jasper Report with multiple Subreport

即时通讯是jasper report的新增功能,即时通讯创建了一个将报告导出为pdf文件的java程序,即时通讯使用jasper report并具有多个子报表,即时通讯是通过jaspersoft studio创建的jrxml文件。

这是我的主报告jrxml文件中的子报表部分

        <subreport>
            <reportElement positionType="Float" x="18" y="1" width="522" height="65" uuid="f3063ed3-775f-47df-8306-a939aecc9d89"/>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA["ClaimHistory.jasper"]]></subreportExpression>
        </subreport>

和另一个子报告部分

        <subreport>
            <reportElement positionType="Float" x="18" y="2" width="522" height="65" uuid="a70d75e0-b9d0-4f52-bb84-090993c2e90b"/>
            <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
            <subreportExpression><![CDATA["ClaimDetail.jasper"]]></subreportExpression>
        </subreport>

每个子报表都使用JRBeanCollectionDataSource(list)作为数据,这是如何将jasper导出到pdf文件

    String jasperFile = "E:/jasper/jasperFile.jrxml";
    FileInputStream inputStream = new FileInputStream(jasperFile);
    JasperReport jasperReport = JasperCompileManager.compileReport(inputStream);
    List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
    JasperPrint print = JasperFillManager.fillReport(jasperReport, params, new JREmptyDataSource());
    jasperPrintList.add(print);
    JRPdfExporter exporter = new JRPdfExporter();
    exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList)); //Set as export input my list with JasperPrint s
    exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("E:/output.pdf")); //or any other out streaam
    exporter.exportReport();

我目前的技能只能通过使用此JRBeanCollectionDataSource(列表)作为数据源而不使用子报表来生成pdf。 (数据打印成功)

任何人都可以告诉我如何使用多个子报表制作pdf报告,什么应该在我的主jrxml文件和子报告jrxml文件中,还有什么应该在java代码上?,以及如何使用多个JRBeanCollectionDataSource(列表)? ,我唯一知道的是使用Map params = new HashMap(); 但怎么办呢? 谢谢。 - 抱歉我的英语不好。

首先定义子报表的数据源是主报表中的字段(main.jrxml)

<field name="claimHistoryDataSource" class="java.util.ArrayList">
    <fieldDescription><![CDATA[claimHistoryList}]]></fieldDescription>
</field>

<field name="claimDetailDataSource" class="java.util.ArrayList">
    <fieldDescription><![CDATA[claimDetailList}]]></fieldDescription>
</field>

claimHistoryListclaimDetailList是java类中定义的ArrayLists,用作主报表的数据源。

然后将其传递给带有dataSourceExpression的子报表

<subreport>
    <reportElement positionType="Float" x="18" y="1" width="522" height="65" uuid="f3063ed3-775f-47df-8306-a939aecc9d89"/>
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{claimHistoryDataSource})]]></dataSourceExpression>
    <subreportExpression><![CDATA["ClaimHistory.jasper"]]></subreportExpression>
</subreport>

<subreport>
    <reportElement positionType="Float" x="18" y="1" width="522" height="65" uuid="f3063ed3-775f-47df-8306-a939aecc9d89"/>
    <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{claimDetailDataSource})]]></dataSourceExpression>
    <subreportExpression><![CDATA["ClaimDetail.jasper"]]></subreportExpression>
</subreport>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM