我有多条记录的报告,其中一条记录由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>
答案 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
。由于您已经按照每条记录进行分组,我认为这应该可以为您提供所需的效果。