当我的jasper报告只有一页时,如何隐藏y的页面x

时间:2012-06-07 08:38:46

标签: jasper-reports

我正在使用jasper-reports 4.5.0并且我正在生成报告。我的要求是如果我的报告只有一个页面,那么它不应该显示页面1 0f 1.我怎么能这样做。要显示页面我正在使用以下代码行。

  <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 个答案:

答案 0 :(得分: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 :(得分:1)

不,没有直接的方法来实现这一目标。当引擎填充第1页时,它不知道是否会有第2页。延迟评估时间不足以解决此问题。

最简单的类似解决方案是隐藏第1页的“Page x of y”。这不符合您的要求......但有些人喜欢它。

最好的相对简单的解决方案是使用子报表。创建一个仅执行当前报表查询的主报表。创建一个名为$P{subreport_has_more_than_one_page}的布尔参数(或者,呃,使用更简洁的名称)。希望您可以使用简单的逻辑,比如知道如果报告返回超过25行,您的报告将是多个页面。这不一定是可能的......但在很大比例的现实案例中确实是可能的。如果您的页面依赖于不可预测的包装长文本,这可能很难。

假设您可以确定$P{subreport_has_more_than_one_page}的值,则将此参数传递给子报表。子报表只是您现有的报表。有了这个值,在第一页上添加一个Print When Expression到'Page x of y'是微不足道的。

答案 2 :(得分:0)

我们可以按照以下步骤实现。

第1步:创建变量,使其存储当前页码。

<variable name="V_CURRENT_PAGE_NUMBER" class="java.lang.Integer" resetType="Page">
    <variableExpression><![CDATA[1]]></variableExpression>
    <initialValueExpression><![CDATA[$V{PAGE_NUMBER}+1]]></initialValueExpression>
</variable>

第2步:添加文本字段,evaluateTime应为自动

价值将是

$ V {PAGE_NUMBER}&gt; 1?msg(&#34; {1}&#34;的页面{0},$ V {V_CURRENT_PAGE_NUMBER},$ V {PAGE_NUMBER}):&#34 ; &#34;

以便PAGE_NUMBER值if大于1,然后打印 total_report_page 的页面 current_page

ex:第1页,共3页

<textField evaluationTime="Auto">
            <reportElement positionType="Float" x="475" y="37" width="74" height="15"/>
            <textElement/>
            <textFieldExpression><![CDATA[$V{PAGE_NUMBER}>1?

消息(&#34; {1}&#34;的页面{0},$ V {V_CURRENT_PAGE_NUMBER},$ V {PAGE_NUMBER}):&#34; &#34;]]&GT;             

答案 3 :(得分:0)

使用 $V{MASTER_TOTAL_PAGES}$V{MASTER_CURRENT_PAGE} 变量代替页码。我尝试制作文本字段来显示页码。然后在文本字段中添加这个表达式

$V{MASTER_TOTAL_PAGES} > 1 ? "(PAGE/OF) "+$V{MASTER_CURRENT_PAGE}+"/"+$V{MASTER_TOTAL_PAGES} : ""

evaluation time 更改为 master

这是我的文本字段的完整片段。

<textField textAdjust="StretchHeight" evaluationTime="Master">
    <reportElement x="315" y="108" width="179" height="20" uuid="0ea93412-058f-49a0-95ac-06728421e4f1"/>
    <textElement textAlignment="Right" verticalAlignment="Middle">
        <font fontName="ThaiFontFamily" size="10"/>
    </textElement>
    <textFieldExpression><![CDATA[$V{MASTER_TOTAL_PAGES} > 1 ? "(PAGE/OF) "+$V{MASTER_CURRENT_PAGE}+"/"+$V{MASTER_TOTAL_PAGES} : ""]]></textFieldExpression>
</textField>

注意:我认为这仅在您有一份主报告且不使用子报告时才有效。