在运行时将子报表添加到主报表(java)

时间:2014-10-28 13:23:40

标签: java jasper-reports subreport dynamic-jasper

好吧,我无法通过谷歌找到我的问题的答案......

目前我正在使用JasperReports和DynamicJasper构建我的报告并打印它们。当我只使用单个jasper文件或jrxml文件时,一切正常。如果我需要组合报告,我还有一段代码将所有JasperPrint文件合并为一个。但是,这并不是最佳的......

我可以使用一个.jasper或.jrxml文件作为主报告(它有一个页眉,一个页脚和一个空的细节带)并用1-n子报告填充其细节带(目前在.jasper或.jxrml)?

目前只有一个我想要的子报告使用数据源(tablemodel),其他想要的子报告从参数中获取数据。

我找到了几种不同的方法来做一些可能导致我想要的结果,但到目前为止还没有成功......哪些建设者/经理/我需要什么?有点沮丧,因为无法找到有关不同类,方法及其参数的足够信息。为什么他们在那里,需要什么。示例不足以解释......

我是否应该使用DynamicReportBuilder为DynamicJasperHelper构建DynamicReport,后者生成JasperReport,而JasperReport又使用JasperFillManager.fillReport方法填充?

1 个答案:

答案 0 :(得分:2)

将所有子报告放在一个主报告中,并使用print when expression来查看。 以下是子报告代码。

<subreport>
   <reportElement uuid="9f36c3cb-7e29-4040-a14e-6a91775e89e4" x="0" y="35" width="555" height="47">
      <printWhenExpression><![CDATA[$P{disp} == 1]]></printWhenExpression>
   </reportElement>
<!-- Other Element -->
</subreport>

请注意以上代码中的以下行。

<printWhenExpression><![CDATA[$P{disp} == 1]]></printWhenExpression>

这意味着$P{disp}.intValue() == 1时应包含整个子报告。 此处$P{disp}是您必须传递给报告才能使用printWhenExpression的参数。

参数或不必要,您也可以使用field。条件基于您的要求。

Note :您可以对所有子报告使用simillar方法。