1

我想突出显示我为显示而生成的报告的某些部分。
我不想更改报告定义。我想在运行时突出显示输出。

但是我使用的 JRViewer 并没有太多的 API。
并且在显示之前使用 setForecolor/setBackcolor 操作 JasperPrint 对象,似乎并没有改变输出。

有任何想法吗?还是我必须重载/重新实现查看器?因为它是开源的,所以问题不大,但我想防止重新发明轮子。

4

1 回答 1

0

看起来我必须自己回答我的问题......再次。

我重载了 JRViewer 类(实际上复制了 JRViewer 的代码,因为没有一个有趣的面板可以访问)并添加了一些突出显示方法来执行以下操作:

基于模板的 JasperPrint 数据使用 - 顾名思义 - 模板。这意味着文本对象没有自己的样式,它们使用模板的样式。
这就是为什么 setForecolor 没有做任何事情的原因 - JRTemplatePrintElement 实现是空的。

但是,如果我在文本模板上设置突出显示,我最终会得到一整列突出显示的文本,因为它们共享模板实例。
相反,我创建了一个新模板作为带有突出显示的原始模板的副本,并在突出显示的打印元素中使用它。顺便说一句,那些 jasper 元素真的可以使用 clone() 方法。
感觉像一个黑客,但我没有看到更好的方法。

更新:
但是,这对基于文件的(虚拟化)报告有一个令人讨厌的副作用。这些显然保存了您在浏览页面时对元素所做的任何更改。但是,如果同时查看器导致虚拟器丢弃您引用的元素(例如通过翻页),您的进一步更改将不会被保存......

所以这让我重新考虑,现在我只是在 Jasper 的 PageRenderer 绘制的 Graphics 对象上绘制我的突出显示。
更简单,更清洁。仅突出显示背景不会以这种方式工作。

于 2009-04-14T10:03:55.513 回答