[英]Passing Locale details via Jasper-Reports to JFreechart
我正在將國際化添加到Tapestry網絡應用程序中,該應用程序使用Jasper Reports通過JFreeChart生成常規的表格報表以及圖表和圖形。
使用Jasper REPORT_LOCALE參數,我可以為Jasper報表設置區域設置,這對於表格報表可以很好地工作,但不適用於JFreeChart報表。
Axis刻度標簽以默認的區域設置顯示,因此,如果我正在進行時間序列,則會得到以錯誤語言顯示的月份名稱。 我弄清楚如何處理此問題的唯一方法是更改我不滿意的JVM默認語言環境。
有誰知道是否有某種方法可以將JFreeChart配置為使用特定的語言環境,以便當Jasper調用它時,它使用該語言環境?
我剛遇到這個問題,並且可以通過創建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)));
}
}
是的,該代碼有很多假設。 但是我總是在運行報告之前明確設置語言環境,因此我知道這不是null。 而且我知道我的特定圖表有一個CategoryPlot和一個NumberAxis,所以我不執行instanceof檢查。 但是你明白了。
查爾斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.