当前位置: 首页 > 知识库问答 >
问题:

具有多个子报表的Jasper报表

桂杰
2023-03-14
        <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>
    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(列表)?我唯一知道的是使用Map params=new HashMap();但怎么做呢?多谢了。-对不起,我的英语太差了。

共有1个答案

公羊瀚
2023-03-14

首先将子报表的数据源定义为主报表中的字段(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类中定义的数组列表,该类用作主报表的数据源。

然后将其传递给带有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>
 类似资料:
  • 我有一个要转换成CSV格式的XML。我使用Jasper Reports来转换它,并使用Jasper Studio来设计JRXML。 这是XML: 我希望CSV格式包含以下列: fields_exitence分为3个(nonMap、ux和两者),属性在

  • 在主报表中打印子报表时。 我使用Jasper API创建主报告,并在主报告中添加编译好的子报告。主报告编译良好。但是图表是重复数据源中数据的数量。 如果数据源(我的数据源是JRBeanCollectionDataSource)有6个,那么它打印2组2个重叠的图形和下面的2个图形 我从报告类的组部分调用子报告来设计主报告 用于编译子报表和填充和生成 PDF 的类 列出数据提供程序 Beans 子报表

  • Jasper报表在从数据库中获取值时是如何工作的。我知道每一行都会重复这个细节带,但我的问题是: 为什么我问这些问题是,我想做一些操作通过所有行的基础上,有一个元素在我的细节带,应该打印或不在每个带。 示例:假设我的DB总是返回两行,一行用于public和一行用于private,并且我必须比较其中的一列,将name写成overall_score,如下所示: 我在detail band上有一个lin

  • 我是贾斯珀报告的新手。我成功地显示了一个带有碧玉报告的表格。但是如何通过Spring控制器在碧玉报告中显示多个表格? 我没有使用数据库作为数据源,只是在ArrayList中使用普通的POJO。 这是我的Spring配置 这是我的控制器。 人员类 如何定义不同的数据源,以便我可以在报表中使用两个(或更多)列表?或者,也许我可以使用一个包含多个列表的数据源?

  • 我有一个主报告,它在详细信息带中查询数据库中的项目列表,另一个详细信息带包含一个子报告,为每个记录呈现一次。我希望这第二个细节带只能在它的子报告不是空的时候呈现。 我试图将子报表中的REPORT_COUNT转换为返回变量,并将参数设置为,但是看起来返回变量是在带区呈现后计算出来的,因此即使正确返回也看不到变量。 我还能做什么? 这里的更新是主报告的JRXML:

  • 我正在尝试使用java swing创建一个报表,它能够打印我在SQL数据库中的数据,我在搜索了我的问题后发现了这个问题,我遵循了一步一步的教程,一切都很顺利,没有错误发生,一开始看起来很好,但在我把这些代码(将生成我想要的报表): 在我运行程序并单击buttong报告后,出现了一个错误并打印如下: 谁能告诉我怎么修这个吗?我错过什么了吗?