Jasper Reports:居中显示当前页码和总页码

5
在Jasper Reports报告的页脚中以"page 2 of 10"的短语形式打印当前页码和总页码。该短语必须居中于页面边距之间。文本格式因区域而异。 自然的方法似乎是使用消息模式进行格式化和翻译,例如msg($R{msg_page_number}, $V{PAGE_NUMBER}, $V{TOTAL_PAGE_NUMBERS})。但这并不可能,因为没有像TOTAL_PAGE_NUMBERS这样的变量。必须在报告布局的不同时间评估PAGE_NUMBER变量。因此,必须使用多个文本元素来打印该行。这使得居中非常困难,因为没有一个文本元素实际上位于页面中心。 有一种方法可以以"$R{page} X $R{of} Y"这样的短语形式打印当前页码和总页数,并使其横向居中于页面上吗?

这里也可以使用https://dev59.com/Lmgv5IYBdhLWcg3wVfZ6#37552266提供的方法! - jhunovis
3个回答

9
使用这个:
<textField evaluationTime="Master">
    <reportElement x="4" y="9" width="546" height="22" uuid="b2d67140-3666-4968-8b46-89672b6fb6d5"/>
    <textElement textAlignment="Right"/>
    <textFieldExpression><![CDATA["Page " + $V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression>
</textField>

重要的是要注意,将评估时间设置为“主”,否则变量将生成null。 - Bu Saeed
1
做到了,谢谢! - Volker Bach

4

有一个变量可以实现这个目标,而且你已经在使用它了。实际上,你用来显示当前页码的相同变量(即:$V{PAGE_NUMBER})也可以用来显示总页数。唯一的区别是你需要更改该变量的评估时间。默认设置为'NOW'(所以第一个PAGE_NUMBER变量是可以的),而对于第二个变量,你应该将其设置为'REPORT'。你应该最终得到一个textField组件,如下所示:

<textField evaluationTime="Report">
        <reportElement uuid="b3d3c256-49ad-492b-8f6e-37ac3a3f2d61" style="Column header" x="678" y="0" width="40" height="13" forecolor="#FFFFFF"/>
        <textElement verticalAlignment="Middle">
            <font fontName="SansSerif" size="10" isBold="false"/>
        </textElement>
        <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>

结果将是:
图片描述在此输入

我知道。但是那需要两个文本字段,并且无法满足我的核心要求:将这些文本字段的组合文本居中。 - jhunovis
我不知道有什么可能的方法只使用一个组件(即单个表达式)来实现,直到我跟随Jasper。使用两个组件不会产生任何成本。您是否使用任何工具生成报告(即jrxml)?如果是这样,就是将组件放置在页脚所需位置(中心)。如果没有,则可以使用组件的“horizontalAlignment”属性。由于有两个UI组件,第一个应该得到“右”值,而第二个应该得到“左”值(当它们相互靠近时)。 - Endrik
无法工作。因为文本元素的宽度不同(例如,当前页面的“第X页”和总页面数的“Y”),所以无法从涉及的文本元素确定组合文本“第X页共Y页”的视觉中心。而且,“页”这个词不是固定的,而是与语言环境有关,即其长度可能会比“页”长或短得多。 - jhunovis
2
@Endrik:可以使用单个字段。https://dev59.com/Lmgv5IYBdhLWcg3wVfZ6#37552266 - Dave Jarvis

0

你可以像这样做来解决你的问题。

取两个字段 Field1 应设置为 $V{Page_Number} 并设置评估时间属性。现在 Field2 应设置为 $V{Page_Number} 并设置评估时间属性。报告

你的问题已经解决....


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接