【发布时间】:2011-07-05 12:47:24
【问题描述】:
如何检查当前打印的页面是否真的是最后打印的页面?
我尝试了以下方法:
$V{currentPage}.intValue() == $V{totalNumberOfPages} ?
Boolean.TRUE : Boolean.FALSE
【问题讨论】:
标签: jasper-reports
如何检查当前打印的页面是否真的是最后打印的页面?
我尝试了以下方法:
$V{currentPage}.intValue() == $V{totalNumberOfPages} ?
Boolean.TRUE : Boolean.FALSE
【问题讨论】:
标签: jasper-reports
等待了很长时间..但 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>
【讨论】:
$P{REPORT_PARAMETERS_MAP}.get("isLastPage") IS NULL
使用以下 Print When Expression 再次打印摘要带:
new Boolean(($P{REPORT_PARAMETERS_MAP}.put(
"LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen")) ||
Boolean.TRUE)
您也可以使用 containskey 来测试密钥的存在性:
new Boolean(!$P{REPORT_PARAMETERS_MAP}.containsKey("LastPageNumber"))
数字表达式也可以工作,这个表达式在每个页面上都为真,除了设置参数的页面:
new Boolean($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber") < $V{PAGE_NUMBER})
我的问题是我在报告末尾为多个交叉表创建了多个组页脚,并使用常量作为组表达式,因此它们只打印一次。通过在第一个页脚中设置参数,我现在终于可以在不使用子报表的情况下隐藏列标题。干得好!!
浆果。
【讨论】:
$P{REPORT_PARAMETERS_MAP}.put( "LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen") || Boolean.TRUE 用于摘要带“打印时间”表达式,$V{PAGE_NUMBER}.equals($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber")) 用于字段“打印时间”表达式
不幸的是,您的方法对我不起作用,我不知道为什么..您的代码中有些东西像这样容易出错
<![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>
我认为事实上 Summary Band 只被调用一次,但你有一个糟糕的编程习惯,因为如果没有与 KEY in the MAP 关联的键,它将返回 null 并且你调用方法 equals在上面你会收到NULLPOINTEREXCEPTION,但我认为在这种情况下不会。
你应该像这样反转
<![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);
我只需要在详细信息下方的最后一页打印一些东西,我使用此代码。
component print when expression
$V{REPORT_COUNT}.equals($P{totalRecordsOnReport})
并在最后一页打印。
【讨论】: