代码之家  ›  专栏  ›  技术社区  ›  finnetrolle

如何在Jasperreports中以特定方式将页眉、页脚和表体拆分为页面

  •  1
  • finnetrolle  · 技术社区  · 7 年前

    朋友们!

    ___________
    |         |
    | header  |
    |         |
    | row     |
    | row     |
    | row     |
    | footer  |
    | footer  |
    |_________|
    

    这是我典型的页面,所有行、页眉和页脚都在同一个页面上。有时我的一页有太多行,我的报告如下所示:

    __________
    |        |
    | header |
    |        |
    | row    |
    | row    |
    | row    |
    | row    |
    | row    |
    |________|
    
    __________
    | row    |
    | row    |
    | row    |
    | row    |
    | row    |
    | row    |
    | row    |
    | footer |
    |________|
    
    __________
    | footer |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |        |
    |________|
    

    我不能在最后一行和页脚之间插入拆分器,因为我的要求是: -标题页必须至少有一行 -页脚页必须至少有一行

    -----===更新===-----

    因此,dada67先生提供了很好的解决方案。我们可以将组放入文档中,组将使用表达式“1”执行我们需要的操作(看起来我们选择了所有元素)。但我的问题有一些更新。

    如果我的每一行都是,并且子报表中有一些行呢?当我在主报表中使用group时,Jasper将其所有行作为一行处理我的每个子报表。我可以强迫Jasper认为单个元素不是整个子报表元素,而是子报表中的一行吗?

    -----===更新2===-----

    所以,解决方案就在这里。当您需要将最后一个子报表的最后一行移动到下一个带有页脚的页面时,您只需要在子报表内创建一个组,其中espression为“1”(收集所有行),并根据dada67的正确答案进行设置。这迫使jasper在每个子报表之后绘制页脚,但您可以在除最后一个子报表之外的所有子报表中隐藏页脚。

    感谢dada67!

    1 回复  |  直到 7 年前
        1
  •  3
  •   dada67    7 年前

    JasperReports 6.4.3引入了两个新的组属性,称为 minDetailsToStartFromTop preventOrphanFooter 用于指定组页眉和页脚是否需要随附一个详细标注栏(如果是页眉,则需要多个)。

    因此,您可以使用常量表达式在报告中创建组,设置这两个属性并使用组页眉和页脚标注栏。

    如中所示

    <group name="Group" minDetailsToStartFromTop="1" preventOrphanFooter="true">
        <groupExpression><![CDATA[1]]></groupExpression>
        <groupHeader>
            ...
        </groupHeader>
        <groupFooter>
            ...
        </groupFooter>
    </group>