【问题标题】:Jasper Reports Show "Page X of Y" using a single text fieldJasper 报告使用单个文本字段显示“Y 页 X”
【发布时间】:2012-05-27 05:54:09
【问题描述】:

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

假设我有一份 10 页的报告。三个是Title Band,六个是Detail Band,一个是Summary Band。我的结果显示"Page 0 of 10" 用于Title Band,正确计数用于Detail Band,然后"Page 0 of 10" 用于Summary Band .

您如何确保变量在各处都得到计算,而不仅仅是在Detail Band上?

【问题讨论】:

  • $V{PAGE_NUMBER} 包含当前页码,你想要的是$V{NumberOfPages},所以你可以在一个文本框中使用它和EvaluationTime: Now。否则,您需要两个文本框解决方案,例如 here
  • @KCD 你的 JasperReport 有 ${NumberOfPages} 变量吗?我这里好像看不到。

标签: jasper-reports


【解决方案1】:

Jaspersoft 工作室,6 岁以上

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

Jaspersoft 工作室

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

这些设置如下图所示:

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

变量已创建。

添加页脚

添加 Page Footer 带,如下所示:

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

添加页脚。

创建文本字段

如下创建一个文本字段:

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

这些设置如下图所示:

单个文本字段已创建。

预览报告

对于三页加摘要页的报告,预览报告显示:

摘要页面显示:

【讨论】:

    【解决方案2】:

    我尝试了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

    【讨论】:

    • 这是最好的方法,至少对我来说是这样。我正在使用 Jaspersoft Studio 最新版本。
    【解决方案3】:

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

    当前页码

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

    总页码

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

    【讨论】:

      【解决方案4】:

      对于页面历史显示如下:Page: 1 of 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>
      

      【讨论】:

      • 我尝试了这里描述的所有解决方案,但这是唯一有效的解决方案,也是最简单的解决方案。贾斯珀 6.6.0 在这里。谢谢。
      【解决方案5】:

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

      不幸的是,我认为您无法实现您想要的,因为当为 Detail 带启用 Split Allowed 时,PAGE_COUNT 中存在一个错误。否则evaluationTime=now"Page " + $V{PAGE_NUMBER} + " of " + $V{PAGE_COUNT}" 可能会起作用。

      【讨论】:

        【解决方案6】:

        这项工作适合我(与戴夫的回答略有不同)

        *使用 JasperSoft Studio

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

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

        希望对您有所帮助!

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            如果您想在报告页脚左侧看到类似 Page 1 of 5 的页面编号,请使用 ireport。

            请按照以下步骤操作

            1. 像这样创建函数变量

            1. 请取一个TextField

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多