我有一个要求,我需要在报告中显示当前页码和总页数。我有一份主报告和两份子报告。我无法确定如何在主页和子报表中显示正确的页面编号。 如果你能帮助我,那将是很棒的。 感谢
答案 0 :(得分:1)
打开Ireport并转到Window->选项板选项可以在工具类别中查看页码和总页面元素。现在只需拖放到要打印页码的位置即可。
答案 1 :(得分:0)
首先,您需要在主raport页面中向页脚添加文本字段,表达式应为:$V{PAGE_NUMBER}+" /"
然后在第一个旁边添加其他文本字段,表达式应为:" " + $V{PAGE_NUMBER}
这将如下所示:1/2
但重要的是那个;
然后,在子报告页面上正确查看这些页码; 单击并选择左侧“报表检查器”窗口顶部的主报表名称。 确保选中并从属性窗口中选择了此选项:
页眉和页脚的摘要
这将使您的子报表正确显示页码。 确保您的子报表具有汇总带以获得结果。
无需将参数传递给子报表,甚至无需将这些文本字段添加到子报表页面以显示页码。
子报告将自动识别页码。
答案 2 :(得分:0)
您可以使用$ V {PAGE_NUMBER}变量,但是在有子报表的情况下,它可以为您提供当前的子报表页码或全部的子报表。报告页数。问题在于Jasper Reports不能直接允许您将当前页码从主报告传递到子报告。
一种简单的解决方案是仅包含在主报表中打印当前页码的功能。由于您失去了管理每个子报表中打印页码的详细信息的能力,因此这行得通,但不是灵活的方式。
最终,我提出了使用脚本的更好的解决方案。主要思想是将包含必要信息的scriptlet实例传递给子报表。
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"/>
在子报告中,从脚本中检索页码
<textFieldExpression><![CDATA["($P{pg_num}.getPageNum())"]]></textFieldExpression>