JasperReports区域内容大于一页

 有时一个特定的区域内容可能大于一页,我们必须在区域内部结构中找到一个合适的位置来分页。当然这种问题并不设计报表所有的区域类型,我觉得页或者列的头尾区域应该不会大于一页,但是谁知道呢。

 

如果标题区域和summary区域大于一页,你应该将该区域内容设置放到子报表中,并按下面将要介绍的技巧处理该子报表。对于页头或列头也用同样的方法,,但是对于页尾和列尾就不行了,因为引擎用固定高度来处理它们,对于它们的元素则不允许拉伸。

 

经过上面的排除法,剩下的就只有组头组尾和数据区域了。组头和组尾可以相同对待,我们先从数据区域入手。

 

如果我们有一个数据区域包含太多的元素使得我们必须分成多页来显示,我们就需要找到一个合适的方法来分页,但是报表引擎没有提供"分页符"这样的元素,怎么办呢?

 

报表引擎只为<group>元素提供了isStartNewPage属性来明确设定分页位置。也许我们可以用它来解决这些问题?

 

通常,报表引擎在被填充区域无法挤在剩余的页空间里时会创建一个新页或列,这也是我们要在报表设计被编译时确认区域是否可以在页内完全显示原因,以使区域不会再比页更高。没有这样的限制,报表引擎将会很困惑(confused)并发生控制之外的动作。因此,为了解决这个问题,我们首先要找到一个如何通过该区域高度检查的方法。

 

我们可以通过将数据区域的内容分割到多个区域中,使每个区域的高度都小于页高,这样报表设计就合法了。用什么样的区域来分割呢?当然是组头和组尾区域了。我们可以将数据区域的一些元素放置在特定分组的组头区域,另一些元素仍然放置在数据区域,剩下的元素可以放置在组尾区域。这样处理唯一的条件是组头尾区域必须总是伴随着数据区域一起显示,三个区域的行为看起来像一个普通的大数据区域。这是最简单的划分方法,因为我们可以创建一个"无用"分组把数据源中的每条数据分为一组,这样的分组表达式可以像下面这样定义:

 

<groupExpression>$V{REPORT_COUNT}</groupExpression>

如果你有一个巨大的数据区域,一个无用分组没法满足你的要求,你可以加入任意多个你认为需要的无用分组,所有的分组表达式都是一样的"无用"表达式。

        当组头和组尾区域大于一页是的情况!没问题,同样的方法就可以了。你只需要创建一个新的分组,使用和需要分割分组同样的分组表达式,并将原来的组头和组尾元素分割放置到新分组的组头和组尾中,这两个分组会用同样的组边界就像一个分组一样,所以分组元素可以任意放置在两个分组的组头和组尾中。

这样区域高度检查也可以通过了。

你可能感兴趣的:(数据结构)