Estilos externos en iReport
Introducción
iReport es una herramienta gratuita (http://jasperforge.org/projects/ireport)
escrita en Java que nos permite diseñar informes (jrxml) para
posteriormente poder usuarlos con JasperReport.
Actualmente existe en Adictosaltrabajo.com
varios tutoriales relacionados con esta herramienta:
- Introducción
a iReport - Subinformes
con iReport - Gráficos
con iReport - Exportar
PDF multiidioma con iReport - Informes
con código HTML - Usar
un DataSource XML para crear informes con iReport - Informes
con fuente de datos ODBC - Informes Crosstab con iReport
En este tutorial vamos a enseñar cómo aplicar estilos externos a nuestros informes mediante el uso de plantillas.
Un informe jasperReport puede utilizar una plantilla de estilos para poder aplicarlos a cada uno de los elementos del informe. Esta posibilidad se añadió en la versión 2.0.1, pero no ha sido hasta la versión 3.5.2 donde se ha incorporado un editor visual que nos ayuda muchísimo a la hora de definir estilos para nuestros informes. Anteriormente a la versión 3.5.2 había soporte para poder utilizar estas plantillas de estilos sobre informes pero al tener que definirlos «a mano», es decir, sin ningún editor visual como iReport, no llegó a ser una funcionalidad muy extendida por su complejidad. Desde la versión 3.5.2, iReport da la posibilidad de poder personalizar estas plantillas de estilos de forma muy cómoda y eficaz.
A continuación se va a realizar un ejemplo donde se podrá ver paso a paso como definir a través del editor visual de iReport una plantilla de estilos (jrtx) y agregarla a un informe de ejemplo.
Entorno
- iReport 3.6.0.
- JDK 1.6
- Sistema operativo Windows XP Pro.
Ejemplo
Vamos a proponer un ejemplo muy sencillo que nos permitirá ver como definir estilos e incorporarlos a un informe de ejemplo. Lo primero que vamos a hacer es plantear un problema.
«Supongamos que trabajamos para una empresa que dispone de un sistema de informes que están disponibles tanto para los empleados como para los jefes. Sin embargo a los jefes de nuestra empresa les encanta el color rojo, la letra cursiva, etcétera, es decir, quieren que los informes que ellos vean se visualicen de un cierta forma. Lo mismo ocurre con los empleados, pero el problema es que los estilos con los que desean ver sus informes son totalmente diferentes».
Una vez planteado el problema de esta empresa vemos que se podría solucionar rápidamente creando dos plantillas de estilos (jrtx) y aplicándolas al mismo informe dependiendo de quién lo esté visualizando. Hasta la versión 2.0.1 de jasperRepor/iReport esto no se podría hacer, ya que los estilos de un informe sólo se podían definir dentro de si mismo (embebidos). Sin embargo, ahora se pueden definir tantas plantillas de estilos como se deseen de forma muy sencilla y rápida.
Crear plantillas de estilos
Para crear una plantilla de estilos (jrtx) tenemos que iniciar la herramienta de iReport y crear un nuevo archivo mediante su asistente (Archivo->New…). Nos aparecerá una ventana donde tendremos que elegir el tipo de archivo a crear. Nosotros debemos elegir el tipo «style».
Como podéis ver también hay una plantilla de estilos específica para gráficas, pero eso mejor lo dejamos para otro tutorial.
Una vez seleccionado el tipo de fichero nos pedirá el nombre y la ubicación de éste.
Tras crear nuestra plantilla de estilos, ahora tenemos que añadir los diferentes estilos que queremos definir. Para ello, dentro del cajón de «Template inspector» hacemos clic en el botón derecho del ratón sobre «Styles» y vamos añadiendo estilos.
Para nuestro ejemplo sólo hemos añadido tres estilos: «titulo», «subtitulo» y «detalle». Para cada uno de ellos se han establecido una serie de características disponibles dentro del cajón de «Propiedades», a la derecha de la pantalla.
Como se puede ver en la imagen anterior, para el estilo «titulo» se ha establecido una fuente Arial, tamaño 26, tipo negrita (Bold), color azulado, etc. Se ha hecho lo mismo para los otros dos estilos restantes.
Una vez definidos todos nuestros estilos guardamos el fichero y ahora tenemos que incorporarlo a nuestro informe de ejemplo.
Insertar plantilla de estilos en un informe
Para insertar una plantilla de estilos en un informe lo que se tiene que hacer es ir al cajón de «Report inspector«, hacer clic en el botón derecho sobre «Styles» y añadir un «Style reference». Al pulsarlo nos aparecerá una ventana donde tendremos que seleccionar nuestro fichero jrtx que hemos creado anteriormente.
Una vez hecho esto vemos que se nos ha incorporado a nuestro elemento «Styles» una referencia a la plantilla de estilos que hemos creado antes. Se pueden añadir tantas plantillas de estilos
se quiera. Además existe la posibilidad de establecer herencia entre diferentes plantillas dentro de un mismo informe lo que nos ayudará mucho cuando estemos usando informes o plantillas más complejas.
Después de insertar nuestra plantilla de estilos tenemos que diseñar nuestro informe de ejemplo que nos servirá para probar todo lo que hemos hecho anteriormente. Para el problema del ejemplo éste es el diseño que se ha elegido. Como se puede ver en la imagen de abajo no hay ningún estilo aplicado sobre ningún elemento del informe.
Aplicar estilos sobre elementos de un informe
Para aplicar un determinado estilo sobre un elemento de un informe (texto fijo, campo, imagen, línea, etc.) hay que hacer clic sobre dicho elemento e irse al cajón de «Propiedades» a la derecha de la pantalla. Una vez allí se tiene que ir a la entrada de «Style«, en la que habrá una lista desplegable con todos los estilos disponibles para el informe. Elegimos uno de ellos y ya tenemos un estilo aplicado sobre un determinado elemento. Dentro de la lista desplegable aparecerán dos tipos de estilos, los estilos propios definidos en el informe y los estilos definidos en la plantilla de estilos insertada. Estos últimos aparecen junto con el texto «(reference)«. En la imagen inferior se puede ver como se le ha añadido al texto fijo «Listado de tutoriales» el estilo «título» de la plantilla de estilos insertada en el informe.
Hacemos lo mismo para los restantes elementos de nuestro informe y el resultado final tras su ejecución es el siguiente.
Ahora vamos a crear otra plantilla de estilos para los jefes definiendo en ella unos estilos diferentes, con otro tipo de letra, tamaño y color. A continuación vamos a nuestro informe de ejemplo, eliminamos la plantilla de estilos para empleados e insertamos la nueva plantilla para jefes. Después lanzamos el informe y vemos como cambia su forma de presentación.
De esta forma podemos ver como hemos dotado a nuestro informe básico sin estilos la capacidad de visualizarse con estilos diferentes según la plantilla insertada en él.
Para terminar este ejemplo lo que vamos a hacer es montar un sistema por el que por un parámetro de entrada al informe se le diga que plantilla de estilos se debe aplicar, y en caso que no se le diga aplicar una por defecto. Para hacer esto tenemos que crear un parámetro de entrada tipo «String» en el que por defecto tendrá la ubicación de la plantilla de estilos para los jefes (por ejemplo).
Además de esto, se tendrá que modificar el código XML del informe para enganchar este nuevo parámetro a las plantillas de estilos del informe. El resultado final debe ser algo como esto.
De esta forma, según la plantilla de estilos que se le pase por parámetro se visualizará el informe de una forma o otra, que es justo la solución a nuestro problema de ejemplo inicial.
Aquí dejo un zip con todos los recursos utilizados para hacer este tutorial (base de datos de ejemplo, jrxml y jrtx) que siempre ayudan mucho 😉
Conclusión
Poco a poco vamos viendo nuevas funcionalidades de jasperReport/iReport, que los hacen unas herramientas muy potentes a la hora la generación de informes dinámicos. Con cada nueva release se hacen cada vez más dinámicos y más fáciles de manejar.
Un saludo, espero que os haya parecido útil este tutorial.
Alfonso Blanco Criado – ablanco@autentia.com
Buenas, no se si dejarte mi duda aquí o enviarla al correo. Te cuento, porque llevamos un tiempo ya locos con este tema.
Cuando generamos un pdf en nuestro entorno de trabajo, se genera bien, dejando los bordes que decimos, etc… pero cuando ese mismo se genera desde producción, hay textos que considera que no caben y nos lo pone en una línea a parte. Por ejemplo:
Local:
Este texto cabe en una linea entera y no me la corta en ningún momento
Producción:
Este texto cabe en una linea entera y no me la corta
en
ningún momento
Algo así nos está ocurriendo. El texto cabe perfectamente, pero sin embargo nos hace eso. Creemos que es por el tipo de letra, que por lo que sea, la que está en el servidor es «distinta» (necesita mas espacio o lo que sea) y piensa que no cabe. Pero no lo conseguimos reproducir en local, para poder arreglarlo.
Te ha pasado esto alguna vez? Sabes que es lo que podría estar pasándonos?
En fin, muchas gracias, y un saludo!
Marta
Compañero!
Muchas gracias por el aporte. Estaba creando unos reportes y en el iReport se veían super bien, pero cuando los generaba en Java, las fuentes siempre cambiaban de tamaño. Esto solucionó mi problema.
En la versión que yo tengo de iReport no se puede elegir el color libremente, no sé si a alguien más le pasa, pero de todas formas se puede elegir el color que sea usando los códigos HTML sobre el XML.
Saludos!
Hola ,
Tengo problema al momento de usar el HTML que me genera el Jasper report.
Cuando uso el HTML generado en mi pagina aparece en una columna todo. Igual sucede cuando lo mando en un correo.
A que se debe esto?
Alguna solucion que conozcan?