Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jasper reports 在Jasper报告查看器中突出显示一些文本_Jasper Reports_Reportviewer_Highlighting - Fatal编程技术网

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绘制的图形对象上绘制高亮显示。
更简单更干净。仅突出显示背景不会以这种方式工作