Tutorial de Jaspersoft Studio

De ChuWiki


En este tutorial vamos a ver como utilizar Jaspersoft Studio desde cero para crear informes. Partimos de que tienes descargado Jaspersoft Studio Community y empezamos un proyecto sencillo desde cero. Iremos poniendo enlaces a conceptos algo más complejos, por si necesitas profundizar en algunos de ellos. Necesitarás una base de datos si quieres previsualizar los informes que estás creando en este tutorial.

Preparación de la base de datos[editar]

Jasper Report admite muchas fuentes de datos. En este ejemplo vamos a usar una base de datos.

Para este ejemplo usaremos una base de datos relacional PostgreSQL, aunque te valdrá cualquiera que tengas si adaptas las sentencias SQL en caso de ser necesario. Crea una base de datos de nombre "chuidiang-examples" y crea la siguiente tabla, con un par de datos.

CREATE TABLE IF NOT EXISTS films (
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,
    title       varchar(40) NOT NULL,
    did         integer NOT NULL,
    date_prod   date,
    kind        varchar(10),
    len         integer
);

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', 82);
INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');

Creación de un Proyecto JasperReports[editar]

Una vez arrancado Jaspersoft Studio, el primer paso es crear un proyecto. En el menú principal "File" -> "new" -> "Project ...". Se abrirá una ventana donde puedes elegir el tipo de proyecto que quieres. Elige "JasperReports Project".

Nuevo proyecto en Jasper Studio
Nuevo proyecto en Jasper Studio

Pulsa "Next >" y ponle un nombre al proyecto. En mi caso le he puesto "Tutorial-JasperReports-Studio". Pulsa "Finsih" y deberías ver tu proyecto creado en la pestaña "Project Explorer"

Nuevo proyecto recién creado en Jasper Studio
Nuevo proyecto recién creado en Jasper Studio

Conexión con la base de datos[editar]

En Jasper Studio puedes conectar con distintas fuentes de datos: base de datos, ficheros csv, excel o json, base de datos MongoDB, etc, etc. En este ejemplo vamos a hacerlo con la base de datos PostgreSQL. Esta conexión es necesaria para facilitarnos la creación del infome y para probarlo directamente desde Jaspersoft Studio.


Pulsa "File" -> "new" -> "Data Adapter". Saldrá una ventana donde debes elegir de qué proyecto es esta fuente de datos y un nombre para el fichero donde se guardarán los parámetros de conexion. Selecciona tu proyecto "Tutorial-JasperReports-Studio" y puedes dejar el nombre del fichero por defecto "DataAdapter.jrdax".

Jasper Studio: Creación de un Data Adapter
Jasper Studio: Creación de un Data Adapter

Pulsa "Next >" y te saldrá una ventana para elegir el tipo de fuente de dato.

Jasper Studio: Selección del tipo de Data Adapter
Jasper Studio: Selección del tipo de Data Adapter

Elegimos "Database JDBC Connection" y pulsamos "Next >". Nos aparece una ventana con todos los posibles bases de datos que conoce Jaspersoft Studio

Jasper Studio: Conexión con la base de datos
Jasper Studio: Conexión con la base de datos

En esta ventana hemos cambiado:

  • Name: Le hemos puesto chuidiang-examples
  • JDBC Driver: Hemos buscado y elegido en el desplegable el de PostgreSQL
  • JDBC URL: localhost y 5432 son el host y puerto que aparecen por defecto y en mi caso coincide con donde está nuestra base de datos. He cambiado al final y he puesto el nombre de mi base de datos "chuidiang-examples":
  • Username/Password: He puesto los de mi base de datos

Hay dos pestañas más donde podemos poner más detalles sobre la conexión, pero para este ejemplo simple no las tocamos.

En la parte de abajo tienes un botón "Test". Si lo pulsas y todo va bien, deberían indicarte que la conexión con la base de datos puede establecerse con éxito. Si es así, pulsa "Finish" y deberías tener lo sigiuente:

  • En la pestaña "Project Explorer", debajo del proyecto "Tutorial Jaspersoft Studio", un nuevo fichero de nombre "DataAdapter.jrdax", o el nombre que le hayamos puesto si lo hemos cambiado.
  • En el panel principal de JasperSoft Studio, este fichero abierto, en forma de formulario, con los parámetros que has rellenado, botón de "Test Connection" y demás. Puedes cambiar lo que quieras si lo necesitas. Si lo modificas, acuérdate de salvarlo con "File" -> "Save" o "File" -> "Save All"

Jaspersoft Studio no salva automáticamente los ficheros. Cuando modifiques cualquier fichero, acuérdate de salvarlo

Creación del Informe[editar]

Ya tenemos todo listo. Podemos empezar a crear el informe.

Pulsa "File" -> "new" -> "Jasper Report". Aparecerá la ventana con las posibles plantillas a elegir

Seleccionar una plantilla para el informe[editar]

Jaspersoft Studio viene con varias plantillas de informes, por si alguna se ajusta al tipo de informe que queremos. Pero nosotros y para aprender, vamoa a elegir una plantilla vacía. Así vamos creando todas las partes del informe paso a paso.

Jasper Studio: Plantillas de informes
Jasper Studio: Plantillas de informes

Elegimos la plantilla en blanco y pulsamos "Next >". En la siguiente pantalla nos pide el nombre que queremos dar al informe y en qué proyecto queremos guardarlo. Rellenamos los campos.

Jasper Studio: Creación de informe
Jasper Studio: Creación de informe

Proyecto hemos elegido "Tutorial Jaspersoft Studio" y de nombre le hemos puesto "ReportExample.jrxml". Hemos respetado la extensión que venía en el nombre por defecto. Pulsa "Next ->".

Selección de la base de datos y tabla[editar]

En la siguiente ventana, en la parte superior, podemos elegir una de las fuentes de datos que tengamos configurada. En mi caso, elijo "chuidiang-examples - [DataAdapter.jrdax]", que es la que habíamos configurado en pasos anteriores. Nada más elegirla, la ventana se conecta con PostgreSQL y nos enseñas los esquemas y bases de datos que tenemos en PostgreSQL. Navegando por el árbol, en mi caso, podemos localizar la tabla "films" de nuestro ejemplo. En mi caso, esquema "public" -> "Table". La siguiente iamgen muestra lo que deberíamos estar viendo

Jasper Studio: Selección de la tabla en base de datos
Jasper Studio: Selección de la tabla en base de datos

Crear la Query de base de datos[editar]

Antes de liarnos a crear la consulta a la base de datos, hay dos detalles que debemos saber. JasperReports crea una cosa que llama DataSet para cada consulta. Y hay dos tipos de DataSet

  • Main DataSet. Este es el principal, solo hay uno para todo el informe. Es el que vamos a definir con la consulta de la ventana que acabamos de abrir.
  • Sub DataSet. De estos puede haber ninguno, uno o muchos. Son consultas secundarias que se realizaran después de hacer la consulta del Main DataSet. Por cada registro que obtengamos en la consulta de Main DataSet, se ejecutarán todos los Sub DataSet. Es decir, si la consulta del Main DataSet obtiene diez resultados, los Sub DataSet se ejecutarán diez veces, una por resultado.

¿Por qué es esto?. Imagina que tenemos dos tablas. Una es la de films que tenemos en el ejemplo. Aunque no la tenemos, imagina que hay otra tabla es "salas" y que para cada película tiene el pais, ciudad, cine y sala donde se muestra cada película. Y por supuesto, cada película tiene varias entradas en la tabla "salas", puesto que puede estar en varios paises, ciudades, cines e incluso salas simultáneamente. Imagina que queremos que nuestro informe tenga una tabla separada por cada pelicula, indicando dónde podemos verla.

Pues bien, el Main DataSet sería la consulta en la tabla de películas. El Sub DataSet sería una consulta en la tabla "salas" para cada película concreta.

La otra cosa que debemos saber es que JasperSoft Studio tiene un componente Table que nos ayuda a dibujar una tabla en el informe a partir de un DataSet. Por el motivo que sea, Jasper Studio no permite asociar este componente Table al Main DataSet, sólo podemos asociarlo a uno de los Sub DataSet.

En nuestro ejemplo, que solo vamos a sacar la tabla de películas, nos complica la vida si ponemos la consulta en el Main DataSet. Asi que no vamos a hacerlo ahí, vamos a crear luego un Sub DataSet con dicha consulta. ¿Y qué ponemos en el Main DataSet?. Pues como hemos comentado que por cada resultado del Main DataSet se ejecutará una el Sub DataSet, debemos poner una consulta que devuelva un resultado. Tampoco queremos algo complejo que cargue la base de datos. "SELECT 1" nos vale.

Así que para facilitarnos la vida en este caso simple que solo queremos pintar una tabla con los resultados de base de datos, en la pestaña "Texts" de la caja derecha de la ventana anterior, escribimos SELECT 1 y pulsamos "Finish"

Colocar elementos en el informe[editar]

Una vez cerrada la ventana con "Finish", ya se ha creado nuestro informe, vacío. Deberíamos ver lo de la siguiente imagen

Jasper Studio: Pantalla de diseño del informe
Jasper Studio: Pantalla de diseño del informe

Hay dos partes importantes ahí.

Por un lado, vemos en papel del informe vacío, pero está partido en zonas que ponen

  • Header. Lo que pongamos aquí irá como encabezado del informe, en la primera página.
  • Page Header. Lo que pongamos aquí irá como encabezado en todas las páginas del informe.
  • Column Header. Lo que pongamos aquí irá como encabezado de cada bloque Detail.
  • Detail 1. Aquí van datos concretos de nuestro informe, resultado de la consulta a base de datos. Podemos añadir varios bloques Detail si queremos varios bloques de resultados.
  • Column Footer. Lo que pongamos aquí ira como footer de cada bloque Detail
  • Page Footer. Lo que pongamos aquí irá como Footer de cada página del informe
  • Summary. En esta zona irá lo que queramos poner como resumen del informe, que solo saldrá en la última página. Es para poner cosas como unas sumas totales, unos resultados finales del informe o lo que necesitemos.

Hay más zonas que no están visibles, en las que también puedes poner cosas. Las tienes en el lado izquierdo abajo, en el panel "Outline".

Jasper Studio: Árbol de bandas de diseño
Jasper Studio: Árbol de bandas de diseño

Además de los mencionados arriba, tienes

  • Last Page Footer. Lo que se ponga aqui irá como pie de la última página del informe
  • No Data. Lo que se ponga aqui es lo que saldrá si la consulta a la base de datos no devuelve resultados. No aparecerán las zonas Detail.
  • Background. Lo que se ponga aquí saldrá como fondo del informe. Una imagen de background en el informe, algún tipo de marca de agua, etc.

Bien, ya sabemos dónde podemos colocar componentes. ¿Cómo los colocamos?. En la imagen donde veíamos el informe con sus zonas, vemos en el lado derecho un listado de componentes. En la imagen se ven cosas como "List", "Chart", "Crosstab", etc. Ese panel tiene scroll vertical, hay más componentes. Puede que no veas los mismo que en la imagen.

Pues bien, esos componentes podemos arrastrarlos bien sobre el informe, bien sobre los nombres de las zonas en el panel "Outline". En el panel "Outline" no te deja añadir componentes sobre "Last Page Footer" y "No Data" porque no están en el informe. De hecho, ves que están en un color más claro que las demás. En el caso de que quieras usarlas, botón derecho sobre ellas para sacar el menú y "Add Band". Para el ejemplo no lo hacemos.

Colocar el Título del Informe[editar]

. Para el título, buscamos el componente "Static Text" y lo arrastramos sobre la zona de título. Aparecerá una caja que podemos redimensionar con el ratón, colocarla donde más nos guste dentro de la zona "Title". Con doble click podemos cambiar el texto y poner el que queramos. Si nos fijamos en el lado derecho inferior de la aplicación JasperSoft Studio, veremos un panel de propiedades que aplican a este "Static Text" que tenemos actualmente seleccionado en el informe

Jasper Studio: Título del informe
Jasper Studio: Título del informe

Hay varias pestañas, "Appearance", "Borders", "Static Text", "Inheritance" y "Advanced". Ahí puedes cambiar la fuente del texto, tamaño de la fuente, colores, alineación dentro de la caja "Static Text", etc, etc. No vamos a detallar todas las opciones porque son muchas y para nuestro ejemplo, en la pestaña "Static Text", puedes cambiar el texto, la alineación horizontal y vertical del texto dentro de la caja "Static Text", la fuente y el tamaño de la fuente. En "Appearance" puedes cambiar el color del texto. En "Borders" puedes poner una caja visible alrededor también con colores. Ponlo a tu gusto.

En el título suele ser también habitual añadir un logo, puedes ver:

Colocar Page Header y Page Footer del informe[editar]

Si te fijas en los componentes, hay dos bloques. El de abajo tiene cosas como número de página, fecha, etc. Estos son adecuados para el Header o el Footer. A modo de ejemplo, vamos a arrastrar el componente "Current Date" sobre la zona "Page Header" y el componente "Page X of Y" sobre el "Page Footer". Al igual que con el título, tendrás las cajas de estos componentes que podrás redimensionar, ajustar y dar estilo en el panel de propiedades.

Colocar la tabla de resultados dentro de Detail[editar]

Bueno, ahora vamos con la parte si no complicada, sí más larga de explicar. Dejamos sin hacer la consulta de verdad y lo hicimos porque queríamos usar el componente "Table" que nos facilita sacar la tabla de resultados. Ha llegado el momento de ponerse a ello. Coge el componente "Table" y arrástralo sobre la zona "Detail 1". Nos saldrá una ventana "Table Wizard" para ayudarnos a definir cómo queremos la tabla

Jasper Studio: Wizard para la creación de tablas
Jasper Studio: Wizard para la creación de tablas

Nos pide el DataSet con el que queremos rellenar la tabla. Como solo tenemos el Main DataSeet, que no podemos usar, la opción de elegir un DataSet existente está dehabilitada. Debemos marcar la opción "Create a Table using a new dataset" y pulsar "Next >". Muestra la siguiente ventana

Jasper Studio: Creación del DataSet para la tabla
Jasper Studio: Creación del DataSet para la tabla

Ponemos un nombre, "Peliculas" en la imagen y marcamos la opción "Create new dataset from a Connection or Data Source". Pulsamos "Next >" y nos vuelva a aparecer la ventana que teniamos cuando hicimos el Main DataSet. Elegimos la conexión a nuestra base de datos "chuidiang-examples" y en la caja "Texts", ahora sí, ponemos nuestra consulta

SELECT * FROM films

Quedaria como en la siguiente imagen

Jasper Studio: Query para el DataSet
Jasper Studio: Query para el DataSet

Puedes querer en la consulta una condición where donde sea el usuario el que introduzca el parámetro de la consulta. Puedes ver como se hace en:

Pulsamos "Next >". Nos saldrá una ventana para seleecionar los campos de la base de datos que queremos que estén disponibles en el DataSet. Estos campos no son los que queremos visibles en la Tabla, son los que queremos que estén disponibles en el DataSet, que podemos usar en varias tablas o en otros sitios.

Jasper Studio: Selección de campos para el DataSet
Jasper Studio: Selección de campos para el DataSet

En nuestro caso, pasamos todos al lado derecho con el botón ">>" y pulsamos "Next >". La siguiente ventana es similar a la que acabamos de ver, pero para "group by". En nuestro caso no necesitamos nada de esto, queremos el listado tal cual. Asi que no tocamos nada y pulsamos "Next >".

En la siguiente ventana nos pregunta qué conexión a base de datos queremos usar para generar los datos de la tabla. Podríamos usar conexiones a otras bases de datos, pero no es el caso. Marcamos "Use same JDBC Connection used to fill de master report", con lo que decimos que queremos seguir usando la misma y única conexión que tenemos hasta ahora. Pulsamos "Next >".

La siguiente ventana es similar a la de selección de campos que vimos antes. Pero esta vez es para incluirlos como columnas en la tabla, se llama "Table Columns". Para nuestro ejemplo, pasamos todos los campos del lado izquierdo "Dataset Fields" al derecho "Fields" con el botón ">>". Pulsamos "Next >"

Nos sale una ventana con el estilo para la tabla

Jasper Studio: Estilo de la tabla
Jasper Studio: Estilo de la tabla

Podemos juguetear con los colores, bordes, etc. Para nuestro ejemplo vamos a dejar solo marcadas las opciones "Add Table Header" y "Add Column Header". Como no hemos hecho "Group By", quitamos las dos de "Add Group Header" y "Add Group Footer". Quitamos también "Add Column Footer" y "Add Table Footer" porque no queremos Footer en nuestra tabla. Cuando termines de dejarla a tu gusto, pulsa "Finish"

En el informe nos aparecerá sobre "Detail 1" la tabla. Podemos arrastrarla y redimensionarla para colocarla bien dentro del informe y darle el tamaño que queramos. Veremos que se ajusta la caja que contiene la tabla, pero no la tabla en sí misma. Haz doble click sobre ella. Veramos que se abre un nuevo panel donde solo está la caja de la tabla con la tabla dentro. Ahí, manualmente, podrías ajustar el ancho de las columnas al ancho de la caja. Pero si quieres simplemente ensancharlas todas igual hasta ocupar el ancho total, vete al panel "Outline", que ahora mostrará solo lo que tiene la tabla

Jasper Studio: Pestaña Outline de la tabla
Jasper Studio: Pestaña Outline de la tabla

Abre el nodo "Table" y dentro de él abre cualquier nodo en el que veas todas las columnas, como en la imagen. Seleccionalas todas: click en "Column1", aprieta la tecla Shift y mantenla apretada, click en "Column6" y suelta Shift. Sin que se deseleccione, click derecho sobre una de ellas para sacar el menú y selecciona "Stretch to Table". Verás que las columnas se redimensionan.

Si te fijas, en la parte de arriba de donde tenemos nuestro dibujo de la tabla, hay ahora dos pestañas. "Main Report" y "Table". Si haces click en "Main Report" vuelves a la página principal del informe. Con los pasos seguidos en este tutorial, habría algo parecido a esto

Jasper Studio: Plantilla del informe
Jasper Studio: Plantilla del informe

En la parte inferior tienes tres pestañas, "Design", "Source" y "Preview". Si haces click en "Preview", tras una espera, deberías ver el informe generado con los datos

Jasper Studio: Previsualización del informe
Jasper Studio: Previsualización del informe

Fichero jrxml[editar]

Ya tenemos nuestro informe generado. El fichero que contiene como generar este informe es el fichero "ReportExample.jrxml". Este es el fichero que tenemos que llevarnos a la aplicación donde queramos generar el informe contra la base de datos de nuestra aplicación.

Puedes ver: