我剛剛遇到了這個問題,並且能夠通過創建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