在 iReport 中,我需要在除最后一页之外的文档中的所有页脚上打印一些文本,但仅当在一个页面中存在多个页面时文档。
用例是我需要人们初始化文档的每个页面,然后在最后签名。事情可能适合一页,但可能是50页。我需要第1..49页的初始行,然后是第50页的签名行。
起初,我认为我只需要直接 PrintWhenExpression 就可以做到这一点:
new Boolean($V{PAGE_NUMBER} == 1 && $V{PAGE_COUNT} > 1)
但是,根据它们的评估时间(现在,与报告与页面对比),这似乎并未正确评估。
答案 0 :(得分:2)
这篇文章描述了很好的解决方案:Compare current page number with last page number。我在下面的示例中使用过它。
借助摘要页面,我们可以设置最后一页已经绘制的标志。
要初始化此标记,我们可以使用摘要频段的 printWhenExpression 。
jrxml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="last_page_on_page_footer" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="37b03978-a847-40ab-bd19-40bd48de326d">
<queryString>
<![CDATA[SELECT TASK FROM TASKS]]>
</queryString>
<field name="TASK" class="java.lang.String"/>
<detail>
<band height="50" splitType="Stretch">
<textField>
<reportElement uuid="bec3ccda-ea30-49fa-a0ad-5bb74a2187a5" x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{TASK}]]></textFieldExpression>
</textField>
</band>
</detail>
<pageFooter>
<band height="54" splitType="Stretch">
<textField evaluationTime="Report">
<reportElement uuid="5e4bb895-fd64-4627-bd35-ca1ed71f8dc1" x="455" y="0" width="100" height="20">
<printWhenExpression><![CDATA[!$P{REPORT_PARAMETERS_MAP}.containsKey("LastPageNumber")]]></printWhenExpression>
</reportElement>
<textElement/>
<textFieldExpression><![CDATA["initials: ___________"]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="788fbc43-92cc-4540-abeb-8fa9bf48d25c" x="0" y="0" width="80" height="20"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement uuid="95286826-b864-46f8-9922-fc0e2f023ba5" x="80" y="0" width="40" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement uuid="25ccab25-ccd2-4187-8a9b-dff54276042e" x="455" y="0" width="100" height="20">
<printWhenExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.containsKey("LastPageNumber")]]></printWhenExpression>
</reportElement>
<textElement/>
<textFieldExpression><![CDATA["Signature: ___ "]]></textFieldExpression>
</textField>
</band>
</pageFooter>
<summary>
<band height="20">
<printWhenExpression><![CDATA[new Boolean(($P{REPORT_PARAMETERS_MAP}.put(
"LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen")) ||
Boolean.TRUE)]]></printWhenExpression>
</band>
</summary>
</jasperReport>
报告的设计(在 iReport 中):
结果将是。第一页(1/2):
第二页(最后一页):
如果只有一页,结果将是:
在我的示例中,我将一个 textField 放在另一个后面。
答案 1 :(得分:0)
只需添加乐队“最后一页页脚”即可 这样,您可以为所有页面设置一个页脚,但最后一页和最后一页的单独页脚。