在国际化报告时,JasperReports不会取代$ R {}

时间:2015-01-15 11:26:48

标签: internationalization jasper-reports

我需要使用JasperReports生成包含现有代码的i18n报告(4.7.1最初但与5.6.1相同的问题)。 我做了以下事情:

  1. 报告名称为:x_report.jrxml
  2. 将属性resourceBundle =“x_report”添加到jrxml文件中的jasperReport标记
  3. 用jrxml文件中的$ R {}标记替换了文本
  4. 内置文件
  5. 将JRParameter.REPORT_LOCALE和JRParameter.REPORT_RESOURCE_BUNDLE添加到要传递给JasperFillManager的参数中:

        File reportFile = new File(getClass().getResource("/reports").getFile(), report.getReportFileName());
        Map<String, Object> fillParams = (Map<String, Object>) report.getFillParameters();
        java.util.Locale locale = new java.util.Locale("it");
        fillParams.put(JRParameter.REPORT_LOCALE, locale);
        String resBundleName = ...
        ResourceBundle resBundle = ResourceBundle.getBundle(resBundleName, locale);
        fillParams.put(JRParameter.REPORT_RESOURCE_BUNDLE, resBundle);
        ...
    

    JasperFillManager获取params(带语言环境和资源包)和报告路径:

        BeanReport report = (BeanReport) this.report;
        Collection<?> beans = report.getBeans();
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(beans);
        JasperPrint print = JasperFillManager.fillReport(reportFile.getPath(), fillParams, ds);
        ...
    
        if (httpSession != null) {
            httpSession.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);
            exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "ReportImage?image=");
        }
    

    exporter是一个JRExporter:

        exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
        exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
        exporter.exportReport();
    

    找到资源包但我生成的报告仍然包含$ R {}标记而不是本地化文本。

    可能缺少什么?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不确定您是否使用JasperReports Server,但如果您对我有用,那就是将我的属性包文件放到../jasperserver-pro/WEB-INF/classes文件夹中。