首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我的jasper报表只有一页时,如何隐藏y的第x页

当我的jasper报表只有一页时,如何隐藏y的第x页
EN

Stack Overflow用户
提问于 2012-06-07 16:38:46
回答 4查看 1.8K关注 0票数 2

我正在使用jasper-reports 4.5.0,我生成的reports.My要求是,如果我的报告只有一页,那么它不应该显示页面1 0f 1。如何才能this.To显示y的页面x我正在使用以下代码行。

代码语言:javascript
复制
  <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>

这是新修改的代码。

代码语言:javascript
复制
<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>
EN

回答 4

Stack Overflow用户

发布于 2012-06-07 21:50:42

定义一个变量NPAGES,该变量设置为报表中的总页数:

代码语言:javascript
复制
<variable name="NPAGES" class="java.lang.Integer" calculation="Highest">
    <variableExpression><![CDATA[$V{PAGE_NUMBER}]]></variableExpression>
    <initialValueExpression><![CDATA[$V{PAGE_NUMBER}]]></initialValueExpression>
</variable>

现在,使用该变量作为条件来确定是否显示页码:

代码语言:javascript
复制
        <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>

我在我的一份报告中尝试了这一点,它起作用了。

票数 3
EN

Stack Overflow用户

发布于 2012-06-11 13:36:13

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

最简单的类似解决方案是在页面1上隐藏“第x页,共y页”。这不符合您的要求……但是有些人很喜欢它。

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

假设您可以确定$P{subreport_has_more_than_one_page}的值,然后将此参数传递给子报表。子报表就是您现有的报表。有了这个值,在第一页的'Page x of y‘中添加一个Print When表达式就很简单了。

票数 1
EN

Stack Overflow用户

发布于 2018-04-25 16:50:02

我们可以通过以下步骤来实现这一点。

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

代码语言:javascript
复制
<variable name="V_CURRENT_PAGE_NUMBER" class="java.lang.Integer" resetType="Page">
    <variableExpression><![CDATA[1]]></variableExpression>
    <initialValueExpression><![CDATA[$V{PAGE_NUMBER}+1]]></initialValueExpression>
</variable>

Step2:添加文本字段,evaluationTime应为Auto

值将为

$V{PAGE_NUMBER}>1?msg(“第{0}页,共{1}页”,$V{V_CURRENT_PAGE_NUMBER},$V{PAGE_NUMBER}):“"

因此,如果PAGE_NUMBER值大于1,则打印total_report_page页current_page,否则

例如:第1页,共3页

代码语言:javascript
复制
<textField evaluationTime="Auto">
            <reportElement positionType="Float" x="475" y="37" width="74" height="15"/>
            <textElement/>
            <textFieldExpression><![CDATA[$V{PAGE_NUMBER}>1?

msg(“第{0}页,共{1}页”,$V{V_CURRENT_PAGE_NUMBER},$V{PAGE_NUMBER}):“"]]>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10928415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档