Sunday, January 3, 2016

Jasper Localization From Property File:Encoding Issue


Recently In a Project I used Jasper to generate PDF forms.While doing this task I encountered a problem with Localization of Jasper Fields from Property Files.

Normally we include below attribute in JRXML header to point to localization files.







Localization files will be in same folder where JRXML is placed and localization files will be in below format.
  • jasperreports_en.properties
  • jasperreports_th.properties
  • etc
And each file will have key value pair like

delivery.date=Delivery Date
delivery.print.date=Print Date

and it will be used in JRXML in below format


and Localization is passed to JRXML in below format
 parameterMap.put(JRParameter.REPORT_LOCALE, new Locale("th"));
Encoding Issue:

When I generated the PDF for Thai language the output was a bunch of junk values.



The problem is resource bundle reads the property files in ASCII encoding even though property file is encoded in UTF-8



Soultion:

Remove the resourcebundle attribute from JRXML and configure it in Java class with UTF-8 Encoding.

 
 try 
 {
  InputStream input = this.getClass().getClassLoader().getResourceAsStream("jasperreport_"+locale.getLanguage()+ ".properties");
  Reader reader = new InputStreamReader(input, "UTF-8");
  ResourceBundle resourceBundle = new PropertyResourceBundle(reader);
  parameters.put(JRParameter.REPORT_RESOURCE_BUNDLE,resourceBundle);
 } 
 catch (IOException  e1) 
 {
  LOG.error("Error locating localize file ",e1);
 } 

2 comments:

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete