当前位置: 首页 > 知识库问答 >
问题:

JasperReport中右对齐的页码信息

班浩皛
2023-03-14

在JasperReport中,我喜欢以当前页面/总页面样式呈现页码。研究官方演示,您可以使用三个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>

然而,只有当完整的分页信息相对于页面居中时(斜杠在中间),这种方法才有效。我希望实现的是以总页面与右边框保持恒定距离的方式右对齐整个组。

如何实现这一点?

共有2个答案

颜思淼
2023-03-14

我在找到了解决方案http://jasperforge.org/plugins/espforum/view.php?group_id=102

秘密似乎是您在 {Y} 的文本字段页面 {X} 中定义了 evalutionTime=“Auto”。

这是它对我的工作方式(再次归功于 http://jasperforge.org/plugins/espforum/view.php?group_id=102

首先定义变量CURRENT_PAGE_NUMBER

Variable class: java.lang.Integer
Calculation: Nothing
Reset type: Page
Variable Expression: $V{PAGE_NUMBER}

这只是复制页码。(有趣的是,论坛帖子说应该设置重置类型:无这在您想在详细信息带中显示{Y}的页面{X}的情况下有效,但如果您喜欢我希望它显示在页面标题带中,则不起作用。)

在这之后,您应该在您希望的< code >第{X}页(共{Y}页)的位置放置一个文本字段,在我的例子中,在页面标题的右侧,输入表达式:

msg("Page {0} of {1}", $V{CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER})  

并设置

evaluationTime="Auto"

由于您现在在一个文本字段中同时拥有当前页数和总页数,因此您可以轻松地以您喜欢的任何方式对齐它。

陈正业
2023-03-14

乍一看,这是一个更难的问题。当您尝试更精确地说明此声明时,关键问题变得清晰,“没有内置的页数变量”。所有变量都有计算时间。所以变量 $V{PAGE_NUMBER} 确实是页数的内置变量......但仅在报告时对其进行评估时。

因此,必须在报告时间对“总页数”字段进行评估。

同样,相同的变量 $V{PAGE_NUMBER} 实际上是当前页码的内置变量......但仅在“现在”或“页面”(或其他适当时间)进行评估时。

因此,您的当前页面字段必须评估为< code>Now或< code>Page。

因此,这些变量必须位于不同的文本字段中,以便在不同的时间进行计算。

但这与您的要求相冲突。由于不能将它们放入同一文本字段中,因此不能使最右侧的项目右对齐,并使左侧的项目完美地流入其中。

根据您的具体情况,您可能能够实现可接受的解决方案。但我的猜测是,解决方法所涉及的工作量太大。例如,您可以想象一个在报表完成填充后运行的scriptlet。它可以通过分析报告找到字段“第3页,共xxx页”,并用正确的总数替换xxx。我不确定这到底是怎么回事;这听起来像是坏消息。我不推荐。

或者,您可以从外部计算总页数,并将其作为参数传递给报告。例如,如果页面的数量直接取决于行的数量,那么它就会起作用。但这只适用于非常特殊的情况。这是一个黑客。

您当然应该记录增强请求。我可以想象一个特殊的变量,当放入一个在神奇的时间自动计算的文本字段中时,它会做你想要的。但就目前而言,我看不到任何简单的方法来得到你想要的东西。

 类似资料:
  • 问题内容: 我可以将JTextArea中的文本向右对齐(或通常更改文本对齐方式)吗? 我一直在搜索数小时,似乎其他人之前也曾问过这个问题,但没有好的答案(这确实有效)。 提前致谢! 问题答案: 尝试使用或代替。 有关更多信息,请查看此线程在JEditorPane中的文本垂直对齐 样例代码: 编辑 你可以试试

  • 问题内容: 基本上,我有一个JTable包含具有右对齐单元格但左对齐标题的列,这看起来确实很糟糕。我想在不更改标题的“外观”的情况下,将这些列的标题右对齐。 谢谢 问题答案: 这是修改表格的的另一种方法。对于此用法,这不是严格必要的,但可以最大程度地减少对UI委托外观的影响。 典型用法: 自定义标题渲染器:

  • 我有一个EditText包含在TextInputLayout中。我希望在EditText下显示错误,但要对齐到屏幕的右端。 我的XML是: 我在使用数据绑定。

  • 问题内容: 我有这些数字的数组 我使用这样的对象 得到这些结果 但是我需要像下面这样将结果对齐到正确的位置 您的帮助已经受到赞赏。 问题答案: 您可以将其包装成这样的呼叫:

  • 问题内容: 我想有A B和C中间对齐。 我如何才能D完全右移? 问题答案: 以下是实现此布局的五个选项: CSS定位 带有不可见DOM元素的Flexbox 带有不可见伪元素的Flexbox Flexbox与 flex: 1 CSS网格布局 方法1:CSS定位属性 应用于容器。 应用于项目D。 现在,此项目已完全放置在flex容器中。 更具体地说,项目D从文档流中删除,但停留在最接近的祖先的范围内。