1

我正在将国际化添加到 Tapestry 网络应用程序中,该应用程序使用 Jasper Reports 生成普通表格报告以及通过 JFreeChart 生成的图表和图形。

使用 Jasper REPORT_LOCALE 参数,我可以为 Jasper 报告设置区域设置,这对于表格报告非常有效,但不适用于 JFreeChart 报告。

轴刻度标签以默认语言环境显示,因此如果我正在执行时间序列,我会得到以错误语言显示的月份名称。我想出解决此问题的唯一方法是更改​​我不满意的 JVM 默认语言环境。

有谁知道是否有某种方法可以将 JFreeChart 配置为使用特定的区域设置,以便在 Jasper 调用它时使用该区域设置?

4

1 回答 1

1

我刚刚遇到了这个问题,并且能够通过创建一个图表定制器类来解决它。

在我的 .jrxml 中:

<chart evaluationTime="Report" customizerClass="foo.Customizer" renderType="image">

我的定制器类看起来像这样:

package foo;

import java.text.NumberFormat;
import java.util.Locale;

import net.sf.jasperreports.engine.JRAbstractChartCustomizer;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRParameter;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;

public class Customizer extends JRAbstractChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setNumberFormatOverride(
          NumberFormat.getInstance((Locale)
          getParameterValue(JRParameter.REPORT_LOCALE)));
    }

}

是的,那段代码做了很多假设。但我总是在运行报告之前明确设置语言环境,所以我知道这不是空的。而且我知道我的特定图表有一个 CategoryPlot 和一个 NumberAxis,所以我不做 instanceof 检查。但你明白了。

查尔斯

于 2010-01-23T01:57:54.413 回答