Jasper Reports 使用单个文本字段显示“第 X 页,共 Y 页”

问题描述 投票:0回答:9

我想创建一个包含

Page X of Y
的文本字段,而不按照常见的解决方案将其分成两部分。我的文本字段包含
"Page " + $V{currentPage} + " of " + $V{PAGE_NUMBER}"
evaluationTime=auto

假设我有一份 10 页的报告。三个是标题带,六个是详细信息带,一个是摘要带。我的结果显示

"Page 0 of 10"
代表标题带详细带的正确计数,然后
"Page 0 of 10"
代表摘要带

如何确保变量在各处计算,而不仅仅是在Detail Band

jasper-reports
9个回答
41
投票

Jaspersoft Studio,6+

对于 Jaspersoft Studio v6,或者如果首页页码重复,请尝试此解决方案,它使用

$V{MASTER_CURRENT_PAGE}
$V{MASTER_TOTAL_PAGE}
,评估时间为
Master

Jaspersoft 工作室

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

创建变量

创建变量如下:

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

这些设置如下图所示:

Current Page Number Variable

Expression 设置为

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

变量已创建。

添加页脚

添加页脚带,如下所示:

  1. 在大纲面板中选择报告
  2. 检查带有页眉和页脚的摘要以确保页脚出现在摘要页面上。
  3. 添加页脚带。

页脚已添加。

创建文本字段

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

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

这些设置如下图所示:

Single Text Field

单个文本字段已创建。

预览报告

对于包含三页加一个摘要页的报告,预览报告会显示:

Page 1

摘要页面显示:

Page 4


31
投票

我尝试了这种方法,但最终得到了不正确的页码:{1/7、1/7、2/7、3/7、4/7、5/7、6/7}。

对于 JasperReports 6+,请使用

MASTER_CURRENT_PAGE
MASTER_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>

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


11
投票

正如您提到的,常见方法使用两个单独的文本字段:

当前页码

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

总页数

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


7
投票

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

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

Master

"Page: "+$V{MASTER_CURRENT_PAGE}+" of "+$V{MASTER_TOTAL_PAGES}

来源:

            <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>

3
投票

关于当前页码,

evaluationTime=now
$V{PAGE_NUMBER}
就是你的答案。

不幸的是,我认为您无法实现您想要的目标,因为当“详细信息”区域启用“允许拆分”时,PAGE_COUNT 中存在错误。否则

evaluationTime=now
"Page " + $V{PAGE_NUMBER} + " of " + $V{PAGE_COUNT}"
可能会起作用。


2
投票

这对我有用(与戴夫的答案略有不同)

*使用 JasperSoft Studio

Capture: adding Variable

然后放置一个带有表达式的文本字段:

"Pág. " + $V{PAGE_NUMBER} +"/" + $V{V_CURRENT_PAGE_NUMBER}

希望这有帮助!


0
投票

这应该会有所帮助,通过使用 evaluationTime 作为 Report

   <textField>
        <reportElement x="497" y="0" width="32" height="12" forecolor="#7E8083"
                           uuid="ef663cfd-4058-40bb-a6d9-de7f9a8164be"/> --update your elements here
        <textElement textAlignment="Right" verticalAlignment="Middle">
            <font fontName="SansSerif" size="7" pdfFontName="OpenSans-Regular.ttf"/>
        </textElement>
        <textFieldExpression>
            <![CDATA["Page " + $V{PAGE_NUMBER} + " of"]]>
        </textFieldExpression>
   </textField>
   <textField evaluationTime="Report">
        <reportElement x="529" y="0" width="7" height="12" forecolor="#7E8083"
                           uuid="ef663cfd-4058-40bb-a6d9-de7f9a8164be"/>  --update your elements here
        <textElement textAlignment="Right" verticalAlignment="Middle">
            <font fontName="SansSerif" size="7" pdfFontName="OpenSans-Regular.ttf"/>
            </textElement>
            <textFieldExpression>
                <![CDATA[$V{PAGE_NUMBER}]]>
            </textFieldExpression>
   </textField>

0
投票

如果您想在报告页脚右侧看到类似

Page 1 of 5
的页面,请使用ireport或jasper报告调色板工具(第X页,共Y页)是完美的。

如果您想在报告页脚左侧看到类似

Page 1 of 5
的页面,请使用ireport。

请按照以下步骤操作

  1. 创建函数变量,如下

enter image description here

  1. 请拿一个文本字段

    “第“+$V{V_CURRENT_PAGE_NUMBER}+”页,共“+ $V{PAGE_NUMBER}”

enter image description here


0
投票

我花了一个小时在 JasperStudio 7.0.0 上解决这个问题,你找到的所有答案都是片面的。

对我来说,正确的解决方案是在带有评估时间主控的文本字段中使用主控变量。不需要声明任何变量,任何增量类型,任何东西。这是工作页面页脚带的示例:

<pageFooter height="50">
    <element kind="textField" uuid="8f531472-05b2-4dba-bc70-1ea4f358ecd9" x="290" y="0" width="210" height="30" evaluationTime="Master">
        <expression><![CDATA["Page " + $V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></expression>
    </element>
</pageFooter>
© www.soinside.com 2019 - 2024. All rights reserved.