如何动态移动报表元素?



我需要添加一个元素到页面,我可以在运行时动态定位。我该怎么做呢?

没有官方的方法,你可能不应该尝试我下面解释的方法。大多数情况下,这表明你的报告设计在某个地方有错误,你应该首先考虑其他选择。

与许多属性不同(您可以使用<propertyExpression>元素来引用字段或参数,这里是一个列表:http://jasperreports.sourceforge.net/config.reference.html),这对于JRBaseElement的坐标和大小是不可能的。

但是有一个hack:你需要自己运行报告,例如从Java。

最后,您将呼叫JasperFillManager.fillReport()。有两个版本。一个只取InputStream,另一个取JasperReport实例。您可以使用

获取一个
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(stream);

这将使您可以访问所有频带(类型JRBand)。

接下来,您需要找到您的元素。从.jrxml文件中获取UUID。用这个UUID (JRBand.getChildren())搜索相应的子带。

现在你可以在元素上调用setX()setHeight()来改变X坐标或宽度。

Y和高度是另一回事。那些是私人领域。如果你真的需要改变这些,看看这里:在Java中通过反射设置私有字段的最短、最好、最干净的方法是什么?

注意,你应该小心不要将元素移动到带的边界框之外。

最新更新