【发布时间】:2019-08-17 15:50:10
【问题描述】:
对于 Jasper 报告 4.5
如何访问条形图标签表达式?我试过ChartCustomizer,我们可以通过SeriesItemLabelGenerator访问标签。但是当这个生成器执行时,它没有我们在 jrxml 文件中为 labelExpression> 字段设置的公式,例如[barValue$ColorCode$]。我发现 labelExpression> 是在 CategoryLabelGenerator 类中执行的,也就是 JasperReport 类。
我想要实现的是从数据集中传递颜色代码以及格式为 [barValue$ColorCode$] 的条形值。我想选择 $ColorCode$ 并获取该值,然后将标签值更改为 [barValue]。 ColorCode 将用于分配来自ChartCustomizer 的条形颜色。但问题是,当我从 StandardCategoryItemLabelGenerator 或 AbstractCategoryItemLabelGenerator 访问 labelExpression 时,它确实从 generateLabelString() 和 generateLabel() 方法返回 [barValue]。
唯一的目的是使用从数据集传递的 ColorCode。如果我们只传递 ColorCode 而不是 [barValue$ColorCode$],那么只有报告显示 [barValue]。我认为我们可以自定义 CategoryLabelGenerator 类然后它会解决我的问题。但我不知道如何自定义 CategoryLabelGenerator。
非常感谢任何实现此目标的输入/帮助。
谢谢。
【问题讨论】:
-
可能是您试图从 jrxml 获取值。您可以扩展 JRAbstractChartCustomizer 类并获取如下给出的值 public class BarChartIndustryMonitor extends JRAbstractChartCustomizer { public void customize(JFreeChart chart, JRChart jasperChart) { BarRenderer render = (BarRenderer) plot.getRenderer(); String chartColor = (String)getParameterValue("chartColor"); if("GREEN".equalsIgnoreCase(chartColor)){ // 你的代码 }else if("BLUE".equalsIgnoreCase(chartColor)){ // 你的代码 }else{ // 你的代码 } } }
-
已经探索过
JRAbstractChartCustomizer。实际上这行不通,因为每行的颜色记录都不同。所以它必须遍历数据集的字段。有什么方法可以将不在数据集中的字段(特别是 CategoryDataset)传递给 ChartCustomizer?