Jasper reports JasperReports中的右对齐页码信息

Jasper reports JasperReports中的右对齐页码信息,jasper-reports,Jasper Reports,在JasperReports中,我喜欢以当前页面/总页面的样式呈现页码。 通过研究官方演示,您可以使用三个文本字段(因为没有内置变量)找到以下解决方案 (对于页数) 但是,只有当完整的分页信息相对于页面居中(斜杠在中间)时,这才可以正常工作。 我想要实现的是以一种方式右对齐整个组,使整个页面与右边框保持恒定的距离 如何做到这一点?一开始似乎是一个更难的问题。当您试图更精确地描述这个声明时,关键问题就变得很清楚了,“页面数没有内置变量”。所有变量都有一个计算时间。所以变量$V{PAGE_NUM

在JasperReports中,我喜欢以当前页面/总页面的样式呈现页码。 通过研究官方演示,您可以使用三个
文本字段
(因为没有内置变量)找到以下解决方案 (对于页数)


但是,只有当完整的分页信息相对于页面居中(斜杠在中间)时,这才可以正常工作。 我想要实现的是以一种方式右对齐整个组,使整个页面与右边框保持恒定的距离


如何做到这一点?

一开始似乎是一个更难的问题。当您试图更精确地描述这个声明时,关键问题就变得很清楚了,“页面数没有内置变量”。所有变量都有一个计算时间。所以变量
$V{PAGE_NUMBER}
实际上是页面数的内置变量。。。但仅当在报告时对其进行评估时

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

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

因此,必须立即计算当前页面字段
Now
Page

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

但这与您的要求相冲突。由于不能将这些项放入同一文本字段,因此不能使最右边的项右对齐,也不能使最左边的项完全流入其中

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

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

您当然应该记录一个增强请求。我可以想象一个特殊的变量,当它被放入一个文本字段中,在神奇的时间
Auto
进行计算时,它会执行您想要的操作。但现在我看不到任何简单的方法来获得你想要的东西。

我已经找到了一个解决方案

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

以下是它对我的作用(再次归功于)

首先定义变量
CURRENT\u PAGE\u NUMBER

Variable class: java.lang.Integer
Calculation: Nothing
Reset type: Page
Variable Expression: $V{PAGE_NUMBER}
这只是复制页码。(有趣的是,论坛帖子说应该设置
Reset type:None
,如果你想在细节栏中显示
第{X}页或第{Y}
,那么这个选项就行了,但如果你想让它显示在页眉栏中,它就不起作用了。)

在此之后,您应该将一个文本字段放置在您希望{Y}中的{X}页面的位置–在我的例子中,在页面标题的右侧,输入表达式:

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

evaluationTime="Auto"

由于您现在在一个文本字段中既有当前页数,也有总页数,因此可以轻松地以任何方式将其对齐

谢谢你的回答。提交一份改进报告可能是个好主意。此外,我还认识到依赖于JasperReports的DynamicReports()项目有一个api方法pageXofY()。我要看看它到底是做什么的。由于我们使用的是由DynamicReports和hnce组装的JasperReport xml片段的混合体,所以无论如何我们都在使用这个库,这可能是一个选项。太好了。如果您成功使用DynamicReports,请在此处提及。事实上如果您在DynamicReports中使用右对齐的第X页(共Y页)时失败,请在此处提及。这种方法对我不起作用。我有一份两页的报告,第一页确实正确地呈现了“第1页,共2页”。但是第二页有“第2页为空”,所以这里有点错误。可能是重复的
evaluationTime="Auto"