通过Jasper-Reports将Locale详细信息传递给JFreechart

时间:2009-10-19 11:36:35

标签: java jasper-reports jfreechart

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

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

Axis刻度标签出现在默认的Locale中,这样如果我正在做一个时间序列,我会用错误的语言出现月份名称。我弄清楚如何处理这个问题的唯一方法是更改​​我不满意的JVM默认语言环境。

有没有人知道是否有某种方法可以配置JFreeChart来使用特定的Locale,这样当Jasper调用它时,它会使用该Locale?

1 个答案:

答案 0 :(得分:1)

我刚碰到这个,并且能够通过创建Chart Customizer类来解决它。

在我的.jrxml:

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

My Customizer类看起来像这样:

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)));
    }

}

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

查尔斯