2013-03-11 2 views
4

Возможно ли с jasper Reports загрузить ResourceBundle (для i18n) во время выполнения?Как загрузить jasperreports resourcebundle во время выполнения?

Я хочу создать отчет из jrxml файла (например c:\reports\report.jrxml)
со своими метками в файле свойств, расположенных в (c:\messages\report.properties).

Я нашел только пример, где файл свойств находится в загрузчике классов.

Благодаря

ответ

5

John Ferguson's blog упоминает, что хитрость заключается в том, чтобы переопределить параметр REPORT_RESOURCE_BUNDLE с пользовательской ResourceBundle экземпляра.

// 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. 
} 
+0

Чтобы эмулировать расслоение наследования ресурсов, см: https://stackoverflow.com/a/4615268/59087 –

2

загрузки пачке из пакета ресурсов:

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

заполнения отчета ::

params.put("REPORT_RESOURCE_BUNDLE", bundle); 
JasperPrint jasPrint = JasperFillManager.fillReport(reportStream, params, data); 
Смежные вопросы