在子报表中使用printWhenExpression和RemoveWhenBlank时,我遇到了JasperReports的问题。
为了重现这个问题,我使用一个主报告和两个子报告做了一个简单的例子。 第一个子报表,我们称之为静态子报表,在标题区域中包含两个静态文本组件(第一行上的标签1,第二行上的标签3),两者都将“位置类型”属性设置为“浮点”。标题区段Split Type属性设置为“Immediate”。
动态子报表有三个静态文本组件(第一行标签1,第二行标签2,第三行标签3),所有这些组件都将“位置类型”设置为“浮点”。但Label 2将PrintWhenExpression设置为Boolean.FALSE,将RemoveLineWhenBlank设置为TRUE。因此标签2被隐藏,标签3被移动到标签1下的标签2的位置。
所以基本上动态子报表和静态子报表具有相同的结构,并且在报表内打印时应该表现相同。但在这个小例子中并非如此。
在主报表中,我在详细信息区域内使用子报表组件(详细信息区段的拆分类型设置为“立即”)并使用具有90个空行的JREmptyDataSource。将子报表组件指向静态子报表时,jasperreports生成的pdf输出是正确的。但是当使用动态子报表时,jasperreports会在第一页末尾留下一个空白空间(在使用静态子报表时使用)并跳转到下一页以打印Label 3.
在我遇到问题的实际情况中,我有一个子报表,其中包含超过20行的静态文本和文本字段组件,其中大多数都是printWhenExpression设置为字段或参数,RemoveLineWhenBlank设置为TRUE。在某些情况下生成pdf输出时,我有一个特定的子报表(应占据页面的三分之一),跨越一页半,在子报表的可见行之间有大量的空间。我认为RemoveLineWenBlank和PrintWhenExpression的组合正是导致问题的原因。 所以我想知道的是,如果这是一个错误,或者只是我遗漏了文档中的内容。 这是我在JasperReports论坛上发布的帖子的链接,它包含主报告和两个子报告的模板,以及由jasperreports生成的两个pdf和显示子报告布局的屏幕截图:link
提前感谢您的帮助。