我刚刚遇到了这个问题,并且能够通过创建一个图表定制器类来解决它。
在我的 .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 检查。但你明白了。
查尔斯