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

标签 java jasper-reports subreport dynamic-jasper

好吧,我无法通过 Google 找到问题的答案,所以...

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

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

目前,只有我想要的子报表之一使用数据源(表模型),其他想要的子报表从参数获取数据。

我找到了几种不同的方法来做某事,最终可能会得到我想要的结果,但到目前为止还没有成功......我需要哪些构建者/经理/什么?因为找不到有关不同类、方法及其参数的足够信息而感到有点沮丧。他们为什么在那里以及需要什么。例子不足以解释......

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

最佳答案

将所有子报告放在一个主报告中,并使用printwhen表达式来提高可见性。 下面是子报表代码。

<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 的参数。

参数或者不是必需的,您也可以使用字段。条件取决于您的要求。

注意:您可以对所有子报表采用类似的方法。

关于java - 在运行时将子报表添加到主报表(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26609508/

相关文章:

jasper-reports - 当子报表为空白时,为什么主报表内的子报表显示一行?

java - 如何将 json 数据从主报表传递到子报表 Jaspersoft Studio

java - 如何使用 DynamicJasper 在没有组的情况下在 JasperReports 的页脚处显示每列的总和?

jasper-reports - JasperReports服务器: HTML Component issue

java - Crystal Report - 使用 ResultSet 的主报表中的子报表

java - 无法在 JasperReports 中使用子报表

java - Hibernate 在内部使用什么类来格式化 SQL 输出?

java - 反序列化通用类 Jackson 或 Gson

java.lang.System.currentTimeMillis() 替换方法

java - Eclipse 显示未使用的导入错误,但所有导入都是必需的