我是 JasperReports 的新手,基本上我想将子报表放在主报表中。
问题是我将子报表放在“详细信息”区域中,因此当我查询包含多个数据的数据库时,当我将报表输出为 pdf 时,子报表总是会重复多次。我想要一份不会重复的报告,无论我连接的数据库中有多少数据。
网上查了解决办法是添加:
new Boolean($V{REPORT_COUNT}.intValue()==1)
在子报表的 print when expression 属性中,这确实解决了我的部分问题,因为现在我的子报表只打印一次,但在显示子报表后仍然留下一些空白页。
所以我认为它仍然在重复,但只是因为我添加的表达式而没有打印数据,人们说细节带的性质应该以这种方式工作,并且我不应该将子报表放入细节带,但如果我把它放在其他带中,我会收到此错误:
Error filling print... Subreport overflowed on a band that does not support overflow.
如果我的数据很多,甚至超过一页,就会出现上面的错误。
如何删除这些空白页?如果我不要求将其放入详细区域,那么我应该做什么?或者有什么解决办法?
详细信息带将生成与主数据集中的记录数一样多的次数(由顶级查询填充)。
如果您想将子报表保留在详细信息区域中(顺便说一下,这是正常的),您可以执行以下操作之一:
$V{REPORT_COUNT}.intValue()==1
) 直接添加到“详细信息”区域上,而不是添加到子报表上。请注意,这只是一个丑陋的黑客行为,可能会影响报告的性能。您的主查询仍然返回大量您不使用的数据,因此您应该考虑其他选项。如果您可以将子报表移出“详细信息”区域,请将其放置在允许溢出的区域(例如“标题”或“摘要”区域)中。然后:
<jasperReport>
标签中)设置whenNoDataType =“AllSectionsNoDetail”,以便生成除详细信息之外的所有其他部分