noticias / Desarrollador

jasper_reports NG

Justo después del lanzamiento de la primera versión candidata de Koo, incorporamos un conjunto de cambios interesantes en el módulo jasper_reports. Estos cambios se pueden clasificar en dos áreas: rendimiento y localización.

Rendimiento

En el área de rendimiento, hemos creado un proceso Java —que se inicia automáticamente cuando se ejecuta el primer informe— para evitar el coste de iniciar la máquina virtual de Java cada vez que hay que imprimir un informe. La otra mejora solo afecta a los informes que utilizan la interfaz XML, que pueden beneficiarse de un aumento de velocidad de hasta el 10 % gracias al uso de archivos CSV en lugar de XML. Es totalmente compatible y no cambia nada cuando el usuario crea informes nuevos.

Localización

Ahora es posible utilizar campos traducibles, como el nombre del producto o del país, en cualquier idioma. De forma predeterminada, la interfaz XML crea los campos traducibles en el idioma del usuario que ejecuta el informe. Si en iReport se asigna al campo el tipo java.lang.Object en lugar de java.lang.String, se puede utilizar esta sintaxis:

$F{product_name}.get( "ca_ES" )

Si el informe es, por ejemplo, una factura, tendrá una relación con el tercero. En ese caso se puede utilizar:

$F{product_name}.get( $F{partner_language} )

Si no existe una traducción para ese idioma, se utilizará la traducción predeterminada.

También decidimos ampliar las funcionalidades de localización de JasperReports. En el diseñador de informes se puede traducir texto con:

tr("This is the text I want to translate")

o con parámetros:

tr("{0} out of {1} think this translation system is great!", $F{positive},$F{total})

También se admiten formas plurales:

trn("One person", "{0} people", $F{people})

Se han implementado casi todas las funciones de java gettext, incluidas versiones con configuración regional parametrizable. Por ejemplo:

tr( new Locale("ca", "ES"), "This text will be translated into Catalan even if the default report locale is in german!")

El directorio jasper_reports/java contiene dos scripts para extraer estos textos:

  • jrxml2pot: extrae los textos del informe a un archivo .pot.
  • po2properties: convierte un archivo PO traducido en un archivo .properties.

El directorio del informe debería contener:

text superreport.jrxml superreport_ca_ES.properties superreport_de_DE.properties ...

Si no hay una traducción disponible, se imprimirá el texto original.

Este mecanismo se puede integrar en los módulos y traducir mediante Launchpad. Como JasperReports carece de infraestructura para este tipo de tareas, tuvimos que volver a implementar GroovyCompiler, y creamos I18nGroovyCompiler. Esto significa que:

  • Hay que utilizar Groovy como lenguaje del informe.
  • No se pueden previsualizar los informes dentro de iReport.

Actualización: pruebas recientes han demostrado que algunos informes tardan menos de la mitad que con el motor XML; por tanto, las mejoras de rendimiento son importantes según el informe.