Jasper Report Chart 操作 labelExpression

Jasper Report Chart manipulate labelExpression

Jasper Report 4.5

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

我想要实现的是从数据集中传递颜色代码以及格式为 [barValue$ColorCode$] 的条值。我想选择 $ColorCode$ 并获取该值,然后将标签值更改为 [barValue]。 ColorCode 将用于分配来自 ChartCustomizer 的条形颜色。但事情是当我从 StandardCategoryItemLabelGeneratorAbstractCategoryItemLabelGenerator 访问 labelExpression 然后它会 returns [barValue]来自 generateLabelString()generateLabel() 方法。

唯一的目的是使用从数据集传递的 ColorCode。如果我们只传递 ColorCode 而不是 [barValue$ColorCode$],那么只有报告显示 [barValue ] 只要。我认为我们可以自定义 CategoryLabelGenerator class 然后它会解决我的问题。但我不知道如何自定义 CategoryLabelGenerator.

非常感谢任何 input/help 实现此目标的人。

谢谢。

在深入研究 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);
            }
        }
    }
}