1

Jasper Reports を使用して通常の表形式のレポートを生成し、JFreeChart を介してチャートやグラフを生成するタペストリー Web アプリに国際化を追加しています。

Jasper REPORT_LOCALE パラメーターを使用して、Jasper レポートのロケールを設定できます。これは、表形式のレポートではうまく機能しますが、JFreeChart レポートでは機能しません。

軸の目盛りラベルはデフォルトのロケールで表示されるため、時系列を実行している場合、月の名前が間違った言語で表示されます。これに対処する方法を見つけた唯一の方法は、JVM のデフォルト ロケールを変更することですが、これには不満があります。

JFreeChart が特定の Locale を使用するように設定して、Jasper が呼び出すときにその Locale を使用する方法があるかどうかは誰にもわかりませんか?

4

1 に答える 1

1

私はこれに出くわしましたが、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 チェックは行いません。しかし、あなたはその考えを理解します。

チャールズ

于 2010-01-23T01:57:54.413 に答える