繁体   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