为了账号安全,请及时绑定邮箱和手机立即绑定

具有多个子报表的 Jasper 报表

具有多个子报表的 Jasper 报表

月关宝盒 2022-08-17 17:09:51
im 在 jasper 报告中是新的,im 创建了一个 java 程序,该程序将报告导出到 pdf 文件,im 使用具有多个子报表的 jasper 报告,im 使用 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)作为数据,这就是im如何将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(list)作为数据源来制作一个pdf而不使用子报表。(数据打印成功)任何人都可以告诉我如何制作一个包含多个子报表的pdf报告,在我的主jrxml文件和子报表jrxml文件中应该有什么,以及java代码上应该有什么?,以及如何使用多个JRBeanCollectionDataSource(list)?,我唯一知道的是使用Map参数=新的HashMap();但是怎么做呢?谢谢。- 对不起我的英语不好。
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

首先定义子报表的数据源是主报表中的字段 (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>

claimHistoryList并且是在 java 类中定义的 ArrayList,用作主报表的数据源。claimDetailList


然后将其传递给带有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>


查看完整回答
反对 回复 2022-08-17
  • 1 回答
  • 0 关注
  • 345 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号