在 JasperReports 中,我喜欢以current-page /total-pages样式呈现页码。研究官方演示,您可以找到以下使用三个的解决方案TextFields(因为没有内置的页数变量)
<!-- Right aligned current page -->
<textField>
<reportElement x="100" width="40" .../>
<textElement textAlignment="Right" ... />
<textFieldExpression class="java.lang.String">
<![CDATA[String.valueOf($V{PAGE_NUMBER})]]>
</textFieldExpression>
</textField>
<!-- Centered aligned slash -->
<staticText>
<reportElement x="140" width="5" .../>
<textElement textAlignment="Center" ... />
<text>
<![CDATA[/]]>
</text>
</staticText>
<!-- Left aligned total number pages (evaluationTime="Reports") -->
<textField evaluationTime="Report">
<reportElement x="145" width="40"/>
<textElement textAlignment="Left" ... />
<textFieldExpression class="java.lang.String">
<![CDATA[String.valueOf($V{PAGE_NUMBER})]]>
</textFieldExpression>
</textField>
Run Code Online (Sandbox Code Playgroud)
但是,只有当完整的分页信息相对于页面居中(中间有斜线)时,这才可以正常工作。我想要实现的是以总页数到右边框具有恒定距离的方式右对齐整个组。
如何实现这一目标?
乍一看,这是一个更难的问题。当您尝试更精确地说明“页数没有内置变量”时,关键问题就变得清晰起来。所有变量都有一个评估时间。因此,该变量$V{PAGE_NUMBER}实际上是页数的内置变量......但仅当它在报告时评估时才有效。
因此,您的总页数字段必须评估为Report Time。
同样,同一个变量$V{PAGE_NUMBER}实际上是当前页码的内置变量......但仅在Now或Page(或其他适当的时间)评估时。
因此,您的当前页面字段必须被评估Now或Page。
因此,这些变量必须位于不同的文本字段中,以便可以在不同的时间对它们进行评估。
但这与你的要求相冲突。由于您无法将它们放入同一个文本字段中,因此您无法将最右侧的项目右对齐并使其左侧的项目完美地流入其中。
根据您的具体情况,您也许能够找到可接受的解决方法。但我的猜测是,解决方法所涉及的工作量将会太大。例如,您可以想象一个在报告填写完毕后运行的脚本。它可以解析报告以找到字段“第 3 页,共 xxx”,并将 xxx 替换为正确的总数。我不确定这到底是如何运作的;这听起来大多是坏消息。我不推荐它。
或者,也许您可以以某种方式在外部计算总页数,并将其作为参数传递到报告中。例如,如果页数直接取决于行数,那么它就会起作用。但这只能在非常特殊的情况下起作用。这是一个黑客行为。
您当然应该记录增强请求。我可以想象一个特殊的变量,当放入文本字段时可以执行您想要的操作,该文本字段在神奇的时间进行评估Auto。但目前我看不到任何简单的方法来获得你想要的东西。
| 归档时间: |
|
| 查看次数: |
4745 次 |
| 最近记录: |