Jasper Reports:y记录中的第x页

时间:2012-06-20 06:16:45

标签: jasper-reports

我有多条记录的报告,其中一条记录由1-5页组成。如何显示"page x of y",其中x是实际记录的页数,y是实际记录的总页数?对于x变量,我有类似下面的内容(在新记录上重置,按页面递增),但它不起作用(在每页x上有1个值):

<variable name="x" class="java.lang.Integer" resetType="Group" resetGroup="report_count" incrementType="Page" calculation="Count">
    <variableExpression><![CDATA[1]]></variableExpression>
    <initialValueExpression><![CDATA[new Integer(1)]]></initialValueExpression>
</variable>

<!-- group by record -->
<group name="report_count" isStartNewPage="true">
    <groupExpression><![CDATA[$V{REPORT_COUNT}]]></groupExpression>
</group>

<textField evaluationTime="Now" evaluationGroup="report_count">
    <reportElement x="141" y="5" width="156" height="20"/>
    <textElement textAlignment="Right"/>
    <textFieldExpression><![CDATA["Page "+$V{x}+" of"]]></textFieldExpression>
</textField>

1 个答案:

答案 0 :(得分:1)

问题在于calculation="count"没有按照您的预期行事。它返回variableExpression返回的非空值的计数。由于您的variableExpression仅返回单个值,因此该变量始终设置为1。

一个简单的解决方案是将计算类型设置为"Nothing",将变量表达式设置为$V{x}+1

即:

<variable name="x" class="java.lang.Integer" resetType="Group" resetGroup="report_count" incrementType="Page" calculation="Nothing">
    <variableExpression><![CDATA[$V{x} + 1]]></variableExpression>
    <initialValueExpression><![CDATA[new Integer(1)]]></initialValueExpression>
</variable>

<小时/>

编辑:替代解决方案

group代码可以包含属性isResetPageNumber。设置为true时,它将在每个组的开头重置内置变量PAGE_NUMBER。由于您已经按照每条记录进行分组,我认为这应该可以为您提供所需的效果。