使用 JasperReports 子报表后的空白页

Ged*_*lya 3 java jasper-reports

我建立了一个报告模板;它使用页眉和页脚的基本报表,然后使用可以注入报表的子报表。一般来说,这工作得很好;但是我注意到主报告中的子报告完成生成后有空白页。

我发现这只是由于主报表模板和子报表在分页时不在同一页面造成的;例如,我正在测试的子报表使用自己的数据源并进行分组。

有没有办法把多余的页面剪掉?我的主报告模板具有以下属性集(无济于事):

When No Data Type: No Pages
Run Code Online (Sandbox Code Playgroud)

子报表具有相同的设置。

我在这里找到了一篇有用的帖子: JasperReports:如何删除子报表中的新页面空白

这建议将以下参数添加到reportElement实际的标签中subreport

isRemoveLineWhenBlank="true"
Run Code Online (Sandbox Code Playgroud)

这样做实际上删除了除一张额外的空白页之外的所有内容;这是一个巨大的成功。但仍然留下一页空白。

这是更改后源的样子:

<subreport overflowType="Stretch">
    <reportElement x="-20" y="0" width="792" height="20" isRemoveLineWhenBlank="true" uuid="e6d4ec67-6ce6-4bbb-b40b-edfb1cfb4722">
Run Code Online (Sandbox Code Playgroud)

由于问题的一般性质;尤其是在阐明标题中的问题时,我发现很难找到有关该主题的相关文章。如果有任何相关页面/博客文章/文章,我们将不胜感激。

Gre*_*ory 5

如果您使用 Java 生成报告,您可以删除最后一个空白页作为解决方法。

JasperPrint jp = JasperFillManager.fillReport(report, params, dataSource);
for (Iterator<JRPrintPage> iterator = jp.getPages().iterator(); iterator.hasNext();) {
     JRPrintPage page = iterator.next();
     if (!iterator.hasNext() && page.getElements().isEmpty()) {
          iterator.remove();
     }
 }
Run Code Online (Sandbox Code Playgroud)