如何在运行时加载jasperreports resourcebundle?

时间:2013-03-11 12:56:23

标签: internationalization jasper-reports

jasper Reports是否可以在运行时加载ResourceBundlei18n}?

我想从jrxml文件创建报告(例如c:\reports\report.jrxml
我的标签位于(c:\messages\report.properties)的属性文件中。

我只找到了属性文件在类加载器中的示例。

由于

2 个答案:

答案 0 :(得分:9)

John Ferguson's blog提到诀窍是使用自定义ResourceBundle实例覆盖REPORT_RESOURCE_BUNDLE参数。

// Compiling the report is not a necessary step; prefer using .jasper files
// that have been pre-compiled to avoid this compilation step.
//
JasperDesign jasperDesign = JasperManager.loadXmlDesign("Report.jrxml");
JasperReport jasperReport = JasperManager.compileReport(jasperDesign);

Map parameters = new HashMap();
parameters.put("REPORT_LOCALE",LocaleManager.currentLocale());
parameters.put("REPORT_RESOURCE_BUNDLE",resourceBundle);
Connection conn = DBConnectionFactory.getConnection();
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
                                                       parameters,
                                                       conn);

resourceBundle可以来自任何地方。例如:

try(FileInputStream fis = new FileInputStream("/tmp/report.properties")) {
  ResourceBundle resourceBundle = new PropertyResourceBundle(fis);

  // Pass resourceBundle into the report, as shown above.
}

答案 1 :(得分:3)

从资源包加载包:

ResourceBundle bundle=ResourceBundle.getBundle("/reports/bundles/bundle",Locale.CANADA_FRENCH);

填写报告::

 params.put("REPORT_RESOURCE_BUNDLE", bundle);
JasperPrint jasPrint = JasperFillManager.fillReport(reportStream, params, data);