簡體   English   中英

通過Jasper-Reports將語言環境詳細信息傳遞給JFreechart

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM