1

iReport中,我需要在文档的所有页脚上打印一些文本,但最后一页除外,但前提是文档中存在多个页面。

用例是我需要人们对文档的每一页进行初始化,然后在最后签名。事情可能适合一页,但可能是 50 页。我需要第 1..49 页上的初始行,然后是第 50 页上的签名行。

起初我认为我可以只用一个直接的PrintWhenExpression来做到这一点:

 new Boolean($V{PAGE_NUMBER} == 1 && $V{PAGE_COUNT} > 1)

但这似乎并不是根据评估的时间(现在,与报告与页面)来正确评估这些。

4

2 回答 2

2

这篇文章中描述了一个很好的解决方案:比较当前页码与最后一页码。我在下面的示例中使用了它。


简短的介绍

在摘要页面的帮助下,我们可以设置最后一页已经绘制的标志。
为了初始化这个标志,我们可以使用摘要带的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 of 2):

在此处输入图像描述

第二个(最后一页):

在此处输入图像描述

如果只有一页,结果将是:

在此处输入图像描述

在我的示例中,我将一个textField放在另一个之后。

于 2013-10-07T21:56:05.040 回答
0

只需添加“最后一页页脚”带 ,这样您就可以为除最后一页之外的所有页面设置一个页脚,为最后一页设置一个单独的页脚。

于 2013-10-07T21:54:15.983 回答