比较当前页码和上一页码

Posted

技术标签:

【中文标题】比较当前页码和上一页码【英文标题】:Compare current page number with last page number 【发布时间】:2011-07-05 12:47:24 【问题描述】:

如何检查当前打印的页面是否真的是最后打印的页面?

我尝试了以下方法:

$VcurrentPage.intValue() == $VtotalNumberOfPages ?
  Boolean.TRUE : Boolean.FALSE

【问题讨论】:

【参考方案1】:

等待了很长时间..但 *** 没有回复... 无论如何我找到了我的解决方案..

首先在您的摘要带中输入此行

<printWhenExpression><![CDATA[new Boolean($PREPORT_PARAMETERS_MAP.put("LastPageNumber",$VPAGE_NUMBER).equals("dummyPrintWhen"))]]></printWhenExpression>

请记住,以上行必须仅在报告的摘要带中。

之后,您可以在报告中的任何时间点比较此参数以查找最后页码。

举例

<printWhenExpression><![CDATA[new Boolean(!$VPAGE_NUMBER.equals($PREPORT_PARAMETERS_MAP.get("LastPageNumber")))]]></printWhenExpression>

【讨论】:

你能详细说明在设计模式下怎么做吗? 你能解释一下你想做什么,以便我可以帮助你。如果我能帮助别人,我总是很高兴。 要点是:如果参数为空,比较 Integer.equals(Integer) 将返回 false。并且 yes 参数为空(在处理汇总带时设置)。所以你可以把映射布尔(或任何其他对象)和条件简单使用$PREPORT_PARAMETERS_MAP.get("isLastPage") IS NULL 先生。 Perlos 我的解决方案在您可以实际测试的所有条件下都能正常工作。 只要摘要带不溢出超过 1 页,它就可以工作,也许 lastPageFooter 会更好。【参考方案2】:

使用以下 Print When Expression 再次打印摘要带:

new Boolean(($PREPORT_PARAMETERS_MAP.put(
"LastPageNumber",$VPAGE_NUMBER).equals("dummyPrintWhen")) ||
Boolean.TRUE)

您也可以使用 containskey 来测试密钥的存在性:

new Boolean(!$PREPORT_PARAMETERS_MAP.containsKey("LastPageNumber"))

数字表达式也可以工作,这个表达式在每个页面上都为真,除了设置参数的页面:

new Boolean($PREPORT_PARAMETERS_MAP.get("LastPageNumber") < $VPAGE_NUMBER)

我的问题是我在报告末尾为多个交叉表创建了多个组页脚,并使用常量作为组表达式,因此它们只打印一次。通过在第一个页脚中设置参数,我现在终于可以在不使用子报表的情况下隐藏列标题。干得好!!

浆果。

【讨论】:

感谢您的回答,我个人将$PREPORT_PARAMETERS_MAP.put( "LastPageNumber",$VPAGE_NUMBER).equals("dummyPrintWhen") || Boolean.TRUE 用于摘要带“打印时间”表达式,$VPAGE_NUMBER.equals($PREPORT_PARAMETERS_MAP.get("LastPageNumber")) 用于字段“打印时间”表达式【参考方案3】:

不幸的是,您的方法对我不起作用,我不知道为什么..您的代码中有些东西像这样容易出错

<![CDATA[new Boolean($PREPORT_PARAMETERS_MAP.put("LastPageNumber",$VPAGE_NUMBER).equals("dummyPrintWhen"))]]></printWhenExpression>

我认为事实上 Summary Band 只被调用一次,但你有一个糟糕的编程习惯,因为如果没有与 KEY in the MAP 关联的键,它将返回 null 并且你调用方法 equals在上面你会收到NULLPOINTEREXCEPTION,但我认为在这种情况下不会。

你应该像这样反转

<![CDATA[new Boolean("dummyPrintWhen".equals($PREPORT_PARAMETERS_MAP.put("LastPageNumber",$VPAGE_NUMBER)))]]></printWhenExpression>

我在这个问题上使用的解决方法如下。

1)。在jasperreports中创建参数

parameter name="totalRecordsOnReport" class="java.lang.Integer"

2)。将您的详细信息的总计记录作为参数传递。

HashMap<Object,Object>parameters=....
parameters.put("totalRecordsOnReport",yourDetailRowCount);

我只需要在详细信息下方的最后一页打印一些东西,我使用此代码。

component print when expression

$VREPORT_COUNT.equals($PtotalRecordsOnReport)

并在最后一页打印。

【讨论】:

以上是关于比较当前页码和上一页码的主要内容,如果未能解决你的问题,请参考以下文章

涉及到的业务逻辑总结

Word页码从当前页自增

Word页码从当前页自增

已制作好的Word文档里面的页码,显示{PAGE},不显示数字,怎么解决?

datatables翻页时,呼叫ajax,全选按钮还是勾选状态,怎么去掉

页码的控制