我想要突出显示我正在生成的报告的某些部分 我不想更改报告定义。我想在运行时突出显示输出。
但我正在使用的JRViewer并没有太多的API 在显示之前用setForecolor / setBackcolor操作JasperPrint对象,似乎没有改变输出。
有什么想法吗?或者我必须重载/重新实现查看器?这不是一个问题,因为它是开源的,但我想防止重新发明轮子。
答案 0 :(得分:0)
看起来我必须自己回答我的问题......
我重载了JRViewer类(实际上是复制了JRViewer的代码,因为没有一个有趣的面板可以访问)并添加了一些突出显示方法来执行以下操作:
基于模板的JasperPrint数据使用 - 如名称所示 - 模板。这意味着文本对象没有自己的风格,他们使用模板的风格 这就是setForecolor没有做任何事情的原因 - JRTemplatePrintElement实现是纯空的。
但是,如果我在文本模板上设置突出显示,我最终会得到一整列突出显示的文本,因为它们共享模板实例。
相反,我创建一个新模板作为原始的副本,突出显示并使用突出显示的打印元素。顺便说一句,那些jasper元素真的可以使用clone()方法
感觉像黑客,但我没有看到更好的方式。
更新:
然而,这对基于文件的(虚拟化)报告具有令人讨厌的副作用。
这些显然可以保存您在浏览页面时对元素所做的任何更改。
但是,如果同时观看者导致虚拟器丢弃您引用的元素(例如通过翻页),则不会保存您的进一步更改...
所以这让我重新考虑,现在我只是在Jasper的PageRenderer绘制的Graphics对象上绘制突出显示。
更简单,更清洁。只有突出显示背景才会这样。