2

私は jasper-reports 4.5.0 を使用しており、レポートを生成しています。私の要件は、レポートに 1 ページしかない場合、ページ 1 0f 1 を表示しないことです。これを行うにはどうすればよいですか。ページ x/y を表示するには以下のコード行を使用しています。

  <textField>
                <reportElement x="395" y="121" width="20" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="350" y="121" width="45" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA["PAGE"]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="415" y="121" width="25" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA["OF"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement x="440" y="121" width="19" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>

これは新しく変更されたコードです。

<variable name="NPAGES" class="java.lang.Integer" calculation="Highest">
        <variableExpression><![CDATA[$V{PAGE_NUMBER}]]></variableExpression>
        <initialValueExpression><![CDATA[$V{PAGE_NUMBER}]]></initialValueExpression>
    </variable>

<textField>
                <reportElement x="395" y="121" width="20" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{PAGE_NUMBER} : ""]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="350" y="121" width="45" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "PAGE" : ""]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="415" y="121" width="25" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "OF" : ""]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="440" y="121" width="19" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{NPAGES} : ""]]></textFieldExpression>
            </textField>
4

4 に答える 4

3

レポートの合計ページ数に設定される変数 NPAGES を定義します。

<variable name="NPAGES" class="java.lang.Integer" calculation="Highest">
    <variableExpression><![CDATA[$V{PAGE_NUMBER}]]></variableExpression>
    <initialValueExpression><![CDATA[$V{PAGE_NUMBER}]]></initialValueExpression>
</variable>

次に、その変数を条件として使用して、ページ番号を表示するかどうかを決定します。

        <textField>
            <reportElement x="395" y="121" width="20" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{PAGE_NUMBER} : ""]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="350" y="121" width="45" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "PAGE" : ""]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="415" y="121" width="25" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? "OF" : ""]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement x="440" y="121" width="19" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[($V{NPAGES} > 1) ? $V{NPAGES} : ""]]></textFieldExpression>
        </textField>

レポートの 1 つでこれを試したところ、うまくいきました。

于 2012-06-07T13:50:42.183 に答える
1

No, there's no direct way to achieve this. At the moment the engine is filling page 1, it doesn't know if there is going to be a page 2. Delayed evaluation times are not sufficient to work around this.

The simplest similar solution is to just hide "Page x of y" on page 1. This does not meet your stated requirement... but some folks like it well enough.

比較的単純な最良の解決策は、サブレポートを使用することです。現在のレポート クエリを実行するだけのメイン レポートを作成します。という名前のブール値パラメーターを作成します$P{subreport_has_more_than_one_page}(または、より簡潔な名前を使用します)。レポートが 25 行以上を返す場合、レポートが複数のページになることを知るなど、簡単なロジックを使用できることを願っています。これは必ずしも可能ではありません...しかし、現実世界のケースの非常に大きな割合で、実際に可能です。ページが予測できない長いテキストの折り返しに依存している場合、これは難しいかもしれません。

の値を決定できると仮定すると$P{subreport_has_more_than_one_page}、このパラメーターをサブレポートに渡します。サブレポートは単に既存のレポートです。この値があれば、Print When Expression を最初のページの 'Page x of y' に追加するのは簡単です。

于 2012-06-11T05:36:12.967 に答える