我正在使用jasper-reports 4.5.0,我生成的reports.My要求是,如果我的报告只有一页,那么它不应该显示页面1 0f 1。如何才能this.To显示y的页面x我正在使用以下代码行。
<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>发布于 2012-06-07 21:50:42
定义一个变量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>我在我的一份报告中尝试了这一点,它起作用了。
发布于 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表达式就很简单了。
发布于 2018-04-25 16:50:02
我们可以通过以下步骤来实现这一点。
步骤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>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页
<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}):“"]]>
https://stackoverflow.com/questions/10928415
复制相似问题