2009-10-19 93 views
1

我將國際化添加到Tapestry Web應用程序中,該應用程序使用Jasper Reports生成正常的表格報告以及通過JFreeChart生成的圖表和圖表。通過Jasper-Reports向JFreechart傳遞語言環境詳細信息

使用Jasper REPORT_LOCALE參數,我可以設置Jasper報告的語言環境,這對於表格報告來說非常合適,但它對JFreeChart報告不起作用。

軸標記標籤出現在默認的語言環境中,所以如果我正在做一個時間序列,我會得到錯誤語言的月份名稱。我想出瞭如何處理這個問題的唯一方法是更改​​我不喜歡的JVM默認語言環境。

有誰知道是否有一些方法來配置JFreeChart使用特定的語言環境,以便當Jasper調用它時,它使用該Locale?

+0

我記得大多數具有區域設置參數的JFreeChart方法。 Jasper不會傳遞它嗎? – jitter 2009-10-19 12:01:52

+0

不可以。我已經查看了源代碼,Jasper小心地將包含Locale的參數Map包含到報告代碼中,但不傳遞給製圖代碼。 – 2009-10-19 20:02:35

回答

1

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

+0

謝謝,下次我在繪製代碼併發布更新時會嘗試這個問題 – 2010-02-05 09:42:51

+0

我剛剛意識到我沒有完全回答你的問題 - 我的問題是數字不是根據區域設置使用正確的小數和千位分隔符進行格式化,而您希望將月名稱進行本地化。但我認爲你可以應用相同的概念 - 你可能有一個DateAxis而不是一個NumberAxis,你應該可以調用DateAxis.setDateFormatOverride()。我的定製工具肯定適合我正在做的事情;我在這個評論中提出的建議沒有經過檢驗,但應該有效。 – 2010-02-17 19:26:53