Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jasper reports 比较当前页码和最后页码_Jasper Reports - Fatal编程技术网

Jasper reports 比较当前页码和最后页码

Jasper reports 比较当前页码和最后页码,jasper-reports,Jasper Reports,如何检查当前打印页是否为最后一页 我尝试了以下方法: $V{currentPage}.intValue() == $V{totalNumberOfPages} ? Boolean.TRUE : Boolean.FALSE 等了很长时间。。但是Stackoverflow没有回复。。。 不管怎样,我找到了解决办法 首先在你的总结栏中写这行 <printWhenExpression><![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.p

如何检查当前打印页是否为最后一页

我尝试了以下方法:

$V{currentPage}.intValue() == $V{totalNumberOfPages} ?
  Boolean.TRUE : Boolean.FALSE

等了很长时间。。但是Stackoverflow没有回复。。。 不管怎样,我找到了解决办法

首先在你的总结栏中写这行

<printWhenExpression><![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>

请记住,以上这一行必须仅位于报告的摘要栏中

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

比如说

<printWhenExpression><![CDATA[new Boolean(!$V{PAGE_NUMBER}.equals($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber")))]]></printWhenExpression>

再次打印摘要栏时,使用以下打印:

new Boolean(($P{REPORT_PARAMETERS_MAP}.put(
"LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen")) ||
Boolean.TRUE)
您还可以使用containskey tot测试键的存在性:

new Boolean(!$P{REPORT_PARAMETERS_MAP}.containsKey("LastPageNumber"))
Nummeric表达式也可以工作,除了设置参数的页面外,此表达式在每个页面上的计算结果均为true:

new Boolean($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber") < $V{PAGE_NUMBER})
new Boolean($P{REPORT\u PARAMETERS\u MAP}.get(“LastPageNumber”)<$V{PAGE\u NUMBER})
我的问题是,我在报告末尾为几个交叉表创建了多个组页脚,组表达式为常量,因此它们只打印一次。通过在第一个页脚中设置参数,我现在终于可以在不使用子报表的情况下超过列标题。干得好


贝瑞。

不幸的是,你的方法对我不起作用,我不知道为什么。。您的代码中有一些东西很容易出错,如下所示

<![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>
<![CDATA[new Boolean("dummyPrintWhen".equals($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER})))]]></printWhenExpression>
我在这个问题上使用的解决方法如下

1) 。在
jasperreports

parameter name="totalRecordsOnReport" class="java.lang.Integer"
2) 。将详细信息的总计记录作为参数传递

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

和打印在最后一页。

您能详细说明如何在设计模式下执行此操作吗?您能告诉我您想做什么,这样我就可以帮助您了。如果我能帮助别人,我总是很高兴。重点是:比较整数。如果参数为null,equals(Integer)将返回false。并且yes参数为null(在处理汇总带时设置)。因此,您可以将映射布尔值(或任何其他对象)置于简单使用的条件下。
$P{REPORT\u PARAMETERS\u map}.get(“isLastPage”)为空。
Perlos先生,我的解决方案在您可以实际测试的每种条件下都能正常工作。只要摘要栏不溢出超过1页,它就会正常工作,也许lastPageFooter会更好。谢谢你们两位的回答,我个人使用了
$P{REPORT\u PARAMETERS\u MAP}.put(“LastPageNumber”,“V{PAGE\u NUMBER}”).equals(“dummyPrintWhen”)| | Boolean.TRUE
作为摘要带'print when'表达式和
$V{PAGE\u NUMBER}.equals($P{REPORT\u PARAMETERS\u MAP}.get(“LastPageNumber”))
用于“打印时间”字段的表达式
$V{REPORT_COUNT}.equals($P{totalRecordsOnReport})