jasper_reports NG
Resumen rápido
jasper_reports NG mejora el rendimiento de los informes al evitar reinicios repetidos de la máquina virtual de Java y acelerar hasta un 10 % los informes basados en XML. También amplía la localización con campos traducibles, parámetros, formas plurales y selección de configuración regional, además de herramientas para extraer y preparar traducciones.
Contenidos
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.
Preguntas frecuentes
¿Qué mejoras de rendimiento incorpora jasper_reports NG?
Inicia automáticamente un proceso Java con el primer informe para evitar reiniciar la máquina virtual cada vez. Los informes que utilizan la interfaz XML también pueden acelerarse hasta un 10 % usando archivos CSV en lugar de XML.
¿Cómo se muestran los campos traducibles en los informes?
Por defecto, se generan en el idioma del usuario que ejecuta el informe. Si el campo es un java.lang.Object, se puede solicitar una localización concreta, como ca_ES, o utilizar el idioma del tercero.
¿Qué sintaxis permite traducir textos con parámetros?
La función tr() permite traducir un texto e incorporar parámetros; trn() permite definir formas singular y plural según una cantidad.
¿Qué limitaciones tiene el compilador I18nGroovyCompiler?
Es necesario utilizar Groovy como lenguaje del informe y no se puede previsualizar el informe dentro de iReport.
Artículos relacionados
Tryton
Tryton, ahora aún mejor equipado
En la Tryton Unconference 2019 se presentaron Shine, Papyrus y Printer, tres herramientas desarrolladas para ampliar las posibilidades de Tryton. Shine integra el trabajo con datos, cálculos, gráficos e informes en el entorno de gestión, mientras que Papyrus y Printer automatizan la inspección y la incorporación de información de facturas y albaranes.
Desarrollador
Python y Tryton
Python ha crecido con rapidez gracias a que es sencillo, libre, compatible con otros lenguajes y muy modular. Tryton se basa en Python desde su creación en 2008 y aprovecha esta combinación para ofrecer un ERP robusto, adaptable y con sólidas prestaciones técnicas.
Tryton
Tryton, the basics
Tryton es un ERP de software libre, robusto, transparente, flexible y abierto. El vídeo de las Jornadas Tryton 2018 ofrece una visión general de su funcionamiento, sus ventajas y también sus puntos débiles.