【问题标题】:How to add page number across master and subreports如何在主报表和子报表中添加页码
【发布时间】:2012-03-07 07:16:25
【问题描述】:

我有一个要求,我需要在报告中显示当前页码和总页码。我有一个主报告和 2 个子报告。我无法确定如何在主报表和子报表中显示正确的页码。 如果你能帮助我,那就太好了。 谢谢

【问题讨论】:

    标签: jasper-reports subreport


    【解决方案1】:

    Open Ireport and Go to Window-> Palette 选项在这里您可以看到工具类别中的页码和总页元素。现在只需拖放到要打印页码的位置即可。

    【讨论】:

    • 谢谢幸运儿的回答。但是我担心您给出的解决方案仅适用于简单的报告。我已经意识到,当我们希望即使在子报告页面上也包含页码时,简单的拖放也不起作用。如果我需要提供一些,请告诉我更多信息。
    【解决方案2】:

    首先,您需要在主报告页面的页脚中添加一个文本字段,表达式应为:$V{PAGE_NUMBER}+" /" 然后在第一个文本字段旁边添加其他文本字段,表达式应为:" " + $V{PAGE_NUMBER} 这将如下所示:1 / 2 但重要的是;

    1. 从属性中设置第一个文本字段评估时间:“现在” 窗户。
    2. 设置第二个文本字段评估时间:“report”来自 属性窗口。

    然后,为了在子报表页面上正确查看这些页码; 单击并选择左侧报告检查器窗口顶部的主报告名称。 确保您从属性窗口中检查并选择了此选项:

    带有页眉和页脚的摘要

    这将使您的子报表正确显示页码。 确保您的子报表具有汇总带以获得结果。

    不需要向子报表传递参数,甚至不需要将这些文本字段添加到子报表页面以显示页码。

    子报表会自动识别页码。

    【讨论】:

      【解决方案3】:

      您可以使用 $V{PAGE_NUMBER} 变量,但如果是子报告,它会为您提供当前子报告页码或总子-报告页数。问题是 Jasper Reports 不允许您将当前页码从主报告传递到子报告。

      简单的解决方案是在主报告中加入打印当前页码的功能。这可行,但方式不灵活,因为您无法管理在每个子报告中打印页码的详细信息。

      最终我想出了更好的利用脚本的解决方案。主要思想是将包含必要信息的脚本实例传递给子报表。

      public class ExampleScriptlet extends JRDefaultScriptlet {
      private Integer page_number;
      
      public void afterPageInit() throws JRScriptletException {
          this.page_number = (Integer) this.variablesMap.get("PAGE_NUMBER").getValue();
      }
      
      public String getPageNum() throws JRScriptletException {
          return String.valueOf(page_number);
      }
      
      public ExampleScriptlet getScriptlet() throws JRScriptletException {
          return this;
      }}
      

      master 报告中将 scriptletClass = "my.example.ExampleScriptlet" 放入 jasperReport 标记中。

      主报告的子报告部分将scriptlet的实例传递给子报告

      <subreportParameter name="pg_num" ><subreportParameterExpression>
                      $P{REPORT_SCRIPTLET}.getScriptlet()
                  </subreportParameterExpression> </subreportParameter>
      

      子报告中声明scriptlet参数

      <parameter name="pg_num" class="my.example.ExampleScriptlet"/>
      

      子报告中从scriptlet中检索页码

       <textFieldExpression><![CDATA["($P{pg_num}.getPageNum())"]]></textFieldExpression>
      

      【讨论】:

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