我正在将国际化添加到Tapestry网络应用程序中,该应用程序使用Jasper Reports通过JFreeChart生成普通的表格报告以及图表和图表。
使用Jasper REPORT_LOCALE参数,我可以设置Jasper报告的Locale,这对于表格报告非常有效,但它不适用于JFreeChart报告。
Axis刻度标签出现在默认的Locale中,这样如果我正在做一个时间序列,我会用错误的语言出现月份名称。我弄清楚如何处理这个问题的唯一方法是更改我不满意的JVM默认语言环境。
有没有人知道是否有某种方法可以配置JFreeChart来使用特定的Locale,这样当Jasper调用它时,它会使用该Locale?
答案 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检查。但是你明白了。
查尔斯