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

时间:2012-05-20 12:08:25

标签: jasper-reports

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

假设我有10页的报告。三个是标题带,六个是细节带,一个是摘要带。我的结果显示标题带"Page 0 of 10"详细信息带的正确计数,然后摘要带<{1}} /强>秒。

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

8 个答案:

答案 0 :(得分:24)

Jaspersoft Studio,6 +

对于Jaspersoft Studio v6,或者如果第一个页码重复,请尝试this solutionCurrent Page Number Variable使用$V{MASTER_CURRENT_PAGE}$V{MASTER_TOTAL_PAGE},评估时间为Master

Jaspersoft Studio

对于其他版本的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}而不是初始值表达式,并将初始值表达式保留为空。
  6. 重置类型设置为:Page
  7. 这些设置如下图所示:

    Single Text Field

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

    创建变量。

    添加页脚

    添加页脚频段,如下所示:

    1. 在大纲面板中选择报告
    2. 检查页面页眉和页脚的摘要,以确保页面页脚显示在摘要页面上。
    3. 添加页脚频段。
    4. 添加了页脚。

      创建文本字段

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

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

        Page 1

        创建单个文本字段。

        预览报告

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

        Page 4

        摘要页面显示:

        blog post

        有关详细信息,请参阅Robert Ensinger关于此主题的.empty()

答案 1 :(得分:10)

我尝试了this approach,但最终得到了错误的页码:{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>

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

答案 2 :(得分:8)

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

当前页码

评估时间

$V{PAGE_NUMBER}:现在

总页数

评估时间

$V{PAGE_NUMBER}:报告

答案 3 :(得分:3)

关于当前页码,evaluationTime=now$V{PAGE_NUMBER}是您的答案。

不幸的是,我不认为你能达到你想要的效果,因为当{4}}中有一个错误时,细分带开启了Split Allowed。否则evaluationTime=now"Page " + $V{PAGE_NUMBER} + " of " + $V{PAGE_COUNT}"可能会有效。

答案 4 :(得分:1)

这是我的作品(与Dave的回答有点不同)

*使用JasperSoft Studio

Capture: adding Variable

然后在文本字段中输入表达式:

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

希望获得帮助!

答案 5 :(得分:0)

通过将 evaluationTime 用作报告

,这应该有所帮助
   <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>

答案 6 :(得分:0)

对于页面历史记录显示如下:页面:1 of 5

输入文本字段:

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

答案 7 :(得分:0)

如果您想在报告页脚的右侧看到类似Page 1 of 5的页面,请使用ireport或jasper report调色板工具(Y的第X页)。

如果要在报表页脚的左侧看到类似Page 1 of 5的页面,请使用ireport。

请按照以下步骤操作

  1. 一样创建函数变量

enter image description here

  1. 请输入一个TextField

    “ + $ V {PAGE_NUMBER}”的“第”页面“ + $ V {V_CURRENT_PAGE_NUMBER} +”

enter image description here