如何在Jasperreports

时间:2017-11-14 10:52:01

标签: jasper-reports export-to-excel export-to-pdf

好朋友!

我对报告有非常特殊的要求。我们先来看一下报告:

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

这是我的典型页面,包含同一页面上的所有行,页眉和页脚。有时我的页面行数太多而且我的报告看起来像这样:

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

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

__________
| footer |
|        |
|        |
|        |
|        |
|        |
|        |
|        |
|________|

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

所以,我可以'找到解决这个问题的方法。我的页脚可以分为两页。我的页脚可能没有行,这对于打印XLS文件非常糟糕。我可以使用XLS的PDF instesad,但我有同样的问题。有没有人有想法如何解决这个问题?

----- === UPDATE === -----

所以,先生。 dada67提供了很好的解决方案。我们可以将小组放入文档中,小组将使用表达式来做我们需要的事情=' 1' (看起来我们选择了所有元素)。但是我的问题有一些更新。

如果我的每一行都是子报告并且里面有一些行怎么办?当我在主报告中使用组时,Jasper处理我的每个子报表,其所有行都作为单行。我可以强制Jasper认为单个元素不是一个完整的子报表元素,而是来自子报表的单行吗?

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

所以,解决方案就在这里。当您需要使用一些页脚将最后一个子报表的最后一行移动到下一页时 - 您只需要在子报表中使用espression =' 1' (收集所有行)和来自dada67的正确答案的设置。此强制jasper在每个子报表后绘制页脚,但您可以在除最后一个之外的所有子报表中隐藏页脚。

感谢dada67!

1 个答案:

答案 0 :(得分:2)

JasperReports 6.4.3引入了两个名为minDetailsToStartFromToppreventOrphanFooter的新组属性,用于指定组头和页脚是否需要附带一个详细信息带(或者在标题的情况下更多) )。

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

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