我想突出顯示某些部分的報告。
我不想更改報告定義。我想在運行時突出顯示輸出。突出顯示Jasper Reports查看器中的某些文本
但我使用的JRViewer並沒有太多的API。
在顯示它之前用setForecolor/setBackcolor操作JasperPrint對象,似乎沒有改變輸出。
任何想法?或者我是否必須重載/重新實現觀衆?因爲它是開源的,所以不會有什麼問題,但我想阻止重新發明輪子。
我想突出顯示某些部分的報告。
我不想更改報告定義。我想在運行時突出顯示輸出。突出顯示Jasper Reports查看器中的某些文本
但我使用的JRViewer並沒有太多的API。
在顯示它之前用setForecolor/setBackcolor操作JasperPrint對象,似乎沒有改變輸出。
任何想法?或者我是否必須重載/重新實現觀衆?因爲它是開源的,所以不會有什麼問題,但我想阻止重新發明輪子。
看起來我必須自己回答我的問題...再次。
我重載JRViewer類(實際複製JRViewer的代碼,因爲沒有一個有趣的面板都是可訪問),並增加了一些突出的方法來做到以下幾點:
基於模板的JasperPrint數據使用 - 就像名字所暗示的 - 模板。意思是文本對象沒有自己的樣式,他們使用模板的樣式。
這就是爲什麼setForecolor沒有做任何事情的原因 - JRTemplatePrintElement實現是純空的。
但是,如果我將文本模板上的突出顯示,我將結束與高亮顯示的文本的完整列,因爲他們共享模板實例。
相反,我創建了一個新的模板作爲原件的副本,突出顯示並在突出顯示的打印元素中使用該模板。順便說一句,那些碧玉元素可以真正使用clone()方法。
感覺像一個黑客,但我沒有看到更好的方法。
更新:
但是,這對基於文件的(虛擬化)報告有一個討厭的副作用。 這些顯然會保存您在走頁面時對元素所做的任何更改。 但是,如果觀看者在此期間導致虛擬器丟棄您引用的元素(例如通過翻頁),則您的進一步更改將不會被保存...
因此,這讓我重新考慮,現在我只需在由Jasper的PageRenderer繪製的Graphics對象頂部繪製突出顯示即可。
更簡單,更清潔。只突出顯示背景將不會以這種方式工作。