【问题标题】:Jasper Report Chart manipulate labelExpressionJasper Report Chart 操作 labelExpression
【发布时间】:2019-08-17 15:50:10
【问题描述】:

对于 Jasper 报告 4.5

如何访问条形图标签表达式?我试过ChartCustomizer,我们可以通过SeriesItemLabelGenerator访问标签。但是当这个生成器执行时,它没有我们在 jrxml 文件中为 labelExpression> 字段设置的公式,例如[barValue$ColorCode$]。我发现 labelExpression> 是在 CategoryLabelGenerator 类中执行的,也就是 JasperReport 类。

我想要实现的是从数据集中传递颜色代码以及格式为 [barValue$ColorCode$] 的条形值。我想选择 $ColorCode$ 并获取该值,然后将标签值更改为 [barValue]。 ColorCode 将用于分配来自ChartCustomizer 的条形颜色。但问题是,当我从 StandardCategoryItemLabelGeneratorAbstractCategoryItemLabelGenerator 访问 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?

标签: jasper-reports jfreechart


【解决方案1】:

在深入研究 JasperReport 和 jFreeChart 文档的源代码后,找到了实现这一目标的方法。在这里写代码。实现了JRChartCustomizer接口。

public void customize(JFreeChart chart, JRChart jasperChart) {

    CategoryPlot plot = chart.getCategoryPlot();

    CategoryDataset dataset = plot.getDataset();

    CategoryLabelGenerator categoryLabelGenerator = null;

    if (jasperChart.getDataset() instanceof JRFillChartDataset) {
        JRFillChartDataset jrFillChartDataset = (JRFillChartDataset) jasperChart.getDataset();

        categoryLabelGenerator = (CategoryLabelGenerator) jrFillChartDataset.getLabelGenerator();
    }

    if (categoryLabelGenerator != null) {
        for (int i = 0; i < dataset.getRowCount(); i++) {
            for (int j = 0; j < dataset.getColumnCount(); j++) {
                String generatedLabel = categoryLabelGenerator.generateLabel(dataset, i, j);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多