我刚刚遇到了这个问题,并且能够通过创建Chart Customizer类来解决它。
在我的.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检查。但你明白了。
Charles
我记得大多数具有区域设置参数的JFreeChart方法。 Jasper不会传递它吗? – jitter 2009-10-19 12:01:52
不可以。我已经查看了源代码,Jasper小心地将包含Locale的参数Map包含到报告代码中,但不传递给制图代码。 – 2009-10-19 20:02:35