Jasper reports 在Jasper报告查看器中突出显示一些文本
我想突出显示我生成的报告的某些部分以供显示。Jasper reports 在Jasper报告查看器中突出显示一些文本,jasper-reports,reportviewer,highlighting,Jasper Reports,Reportviewer,Highlighting,我想突出显示我生成的报告的某些部分以供显示。 我不想更改报告定义。我想在运行时突出显示输出 但是我使用的JRViewer实际上没有多少API。 在显示JasperPrint对象之前,使用setForecolor/setBackcolor操作该对象,似乎并没有改变输出 有什么想法吗?或者我必须重载/重新实现查看器吗?因为它是开源的,所以不会有太大问题,但我想避免重新发明轮子。看起来我必须自己回答我的问题。。。再说一遍 我重载了JRViewer类(实际上复制了JRViewer的代码,因为没有任何有趣
我不想更改报告定义。我想在运行时突出显示输出 但是我使用的JRViewer实际上没有多少API。
在显示JasperPrint对象之前,使用setForecolor/setBackcolor操作该对象,似乎并没有改变输出
有什么想法吗?或者我必须重载/重新实现查看器吗?因为它是开源的,所以不会有太大问题,但我想避免重新发明轮子。看起来我必须自己回答我的问题。。。再说一遍 我重载了JRViewer类(实际上复制了JRViewer的代码,因为没有任何有趣的面板可访问),并添加了一些突出显示方法来执行以下操作: 基于模板的JasperPrint数据使用模板(顾名思义)。这意味着文本对象没有自己的样式,它们使用模板的样式。
这就是setForecolor没有做任何事情的原因——JRTemplatePrintElement实现是纯空的 但是如果我在文本模板上设置突出显示,我将得到一整列突出显示的文本,因为它们共享模板实例。
相反,我创建了一个新模板,作为带有高亮显示的原始模板的副本,并在高亮显示的打印元素中使用该模板。顺便说一句,那些jasper元素实际上可以使用clone()方法。
感觉像是黑客,但我没找到更好的方法 更新:
然而,这对基于文件(虚拟化)的报告有一个令人讨厌的副作用。 这些显然保存了在浏览页面时对元素所做的任何更改。 但是,如果同时查看器导致虚拟机放弃您引用的元素(例如通过翻页),则不会保存您进一步的更改 这让我重新考虑,现在我只是在Jasper的PageRenderer绘制的图形对象上绘制高亮显示。
更简单更干净。仅突出显示背景不会以这种方式工作