我正在将国际化添加到一个Tapestry web-app中,它使用Jasper报告来生成正常的表格报告,也可以通过JFreeChart生成图表和图形。
使用Jasper REPORT_LOCALE参数,我可以设置Jasper报告的区域设置,这对表格报告很有效,但不适用于JFreeChart报告。
Axis tick标签是以默认区域设置出现的,所以如果我在做时间序列,我会得到错误语言的月份名称。我想出了解决这个问题的唯一方法就是更改JVM的默认语言环境,我对此并不满意。
有没有人知道有没有办法将JFreeChart配置为使用特定的语言环境,这样当Jasper调用它时,它就会使用该语言环境?
发布于 2010-01-23 09:57:54
我刚刚遇到了这个问题,并且能够通过创建一个Chart Customizer类来绕过它。
在我的.jrxml中:
<chart evaluationTime="Report" customizerClass="foo.Customizer" renderType="image">然后,我的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)));
}
}是的,这段代码做了很多假设。但是我总是在运行报告之前显式地设置locale,所以我知道它不是空的。而且我知道我的特定图表有一个CategoryPlot和一个NumberAxis,所以我不做instanceof检查。但你明白我的意思。
查尔斯
https://stackoverflow.com/questions/1588196
复制相似问题