1

iReportでは、最後のページを除くドキュメントのすべてのページ フッターにテキストを印刷する必要がありますが、ドキュメントに複数のページが存在する場合のみです。

ユースケースは、ドキュメントの各ページにイニシャルを付け、最後に署名する必要がある場合です。1 ページに収まる場合もありますが、50 ページになる場合もあります。1 ~ 49 ページの最初の行と、50 ページの署名行が必要です。

最初は、単純なPrintWhenExpressionだけでこれを実行できると思います。

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

しかし、それは、それらが評価される時期に応じて正しく評価されないように見えます (現在、対レポート対ページ)。

4

2 に答える 2

2

良い解決策は、この投稿で説明されています:現在のページ番号を最後のページ番号と比較します。以下のサンプルで使用しました。


簡単な説明

概要ページの助けを借りて、最後のページが既に描画されているというフラグを設定できます。
このフラグを初期化するには、Summaryバンドの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):

ここに画像の説明を入力

そして2番目(最後のページ):

ここに画像の説明を入力

1 ページのみの場合、結果は次のようになります。

ここに画像の説明を入力

私のサンプルでは、​​一方のtextFieldをもう一方の後ろに配置しました。

于 2013-10-07T21:56:05.040 に答える
0

バンド「最後のページフッター」を追加するだけ で、最後のページ以外のすべてのページに 1 つのフッターを作成し、最後のページに別のフッターを作成できます。

于 2013-10-07T21:54:15.983 に答える