使用单个文本字段显示"Y的页面X"

qar*_*rol 18 jasper-reports

我想Page X of Y根据常见的解决方案创建一个包含的文本字段,而不将其分为两部分.我的文本字段包含"Page " + $V{currentPage} + " of " + $V{PAGE_NUMBER}"evaluationTime=auto.

假设我有10页的报告.三个是Title Band,六个是Detail Band,一个是Summary Band.我的结果显示"Page 0 of 10"标题带 S,对于正确的计数详细带 S,然后"Page 0 of 10"总结波段秒.

你如何确保变量在任何地方计算,而不仅仅是在细节带

Dav*_*vis 25

Jaspersoft Studio,6岁以上

对于Jaspersoft Studio v6,或者如果第一个页码重复,请尝试使用此解决方案,该解决方案使用$V{MASTER_CURRENT_PAGE}并且$V{MASTER_TOTAL_PAGE}评估时间为Master.

Jaspersoft Studio

对于其他版本的Jaspersoft Studio,请尝试后续小节中概述的步骤.

创建变量

创建一个变量如下:

  1. 创建一个名为的变量 V_CURRENT_PAGE_NUMBER
  2. 选择变量以打开其属性(如下图所示)
  3. 表达式设置为:1
  4. 初始值表达式设置为:$V{PAGE_NUMBER}
    • 如果显示页码0,请使用$V{PAGE_NUMBER} + 1.
    • 如果始终显示页码1 of Y,请将Expression设置为$V{PAGE_NUMBER}而不是初始值表达式,并将初始值表达式保留为空.
  5. 重置类型设置为:Page

这些设置如下图所示:

当前页码变量

设置表达式1防止其值null.也就是说,如果页脚显示Page null为4,则可能意味着尚未设置Expression.

变量已创建.

添加页脚

添加页脚页带如下:

  1. 在大纲面板中选择报告
  2. 使用页眉和页脚检查摘要以确保页面页脚显示在摘要页面上.
  3. 添加页脚页带.

页脚已添加.

创建文本字段

创建一个文本字段,如下所示:

  1. 单个文本字段拖放到页面页脚区域.
  2. 选择文本字段.
  3. 表达式设置为:msg("Page {0} of {1}", $V{V_CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER})
  4. 评估时间设置为:Auto

这些设置如下图所示:

单文本字段

单个文本字段已创建.

预览报告

对于包含三个页面和摘要页面的报表,预览报表显示:

第1页

摘要页面显示:

第4页

有关详细信息,请参阅Robert Ensinger 关于此主题的博客文章.


Mar*_*inW 11

我尝试了这种方法,但最终得到了错误的页码:{1 / 7,1/7,2/7,3/7,4/7,5/7,6/7}.

对于JasperReports 6+,使用MASTER_CURRENT_PAGEMASTER_TOTAL_PAGES系统变量并记住将文本字段评估时间设置为Master:

<textField evaluationTime="Master">
    <textElement textAlignment="Right"/>
    <textFieldExpression><![CDATA[msg("Page {0} of {1}", $V{MASTER_CURRENT_PAGE}, $V{MASTER_TOTAL_PAGES})]]></textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)

请参阅:http://jasperreports.sourceforge.net/sample.reference/book/index.html


lif*_*foo 10

如您所述,常用方法使用两个独立的文本字段:

当前页码

$V{PAGE_NUMBER} 评价时间:现在

总页数

$V{PAGE_NUMBER} 评估时间:报告


Imr*_*bar 6

对于页面历史记录显示如下: 页面:第 1 页(共 5 页)

使文本字段值如下所示,并将评估时间更改为Master

"Page: "+$V{MASTER_CURRENT_PAGE}+" of "+$V{MASTER_TOTAL_PAGES}
Run Code Online (Sandbox Code Playgroud)

来源:

            <textField evaluationTime="Master">
                <reportElement x="224" y="0" width="186" height="15" uuid="6641bb8b-9f48-4832-942b-8b04220030e6">
                    <property name="com.jaspersoft.studio.unit.height" value="px"/>
                </reportElement>
                <textElement verticalAlignment="Top">
                    <font size="8"/>
                </textElement>
                <textFieldExpression><![CDATA["Page: "+$V{MASTER_CURRENT_PAGE}+" of "+$V{MASTER_TOTAL_PAGES}]]></textFieldExpression>
            </textField>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这里描述的所有解决方案,但这是唯一有效的解决方案,也是最简单的解决方案。这里是贾斯珀 6.6.0。谢谢。 (2认同)