Creando informes en Java con JasperReports desde Jaspersoft Studio

JasperReports creando informe

Una de mis herramientas favoritas para crear informes desde Java sobre base de datos es JasperReports (Community JasperReports Library) que es una librería open source para el desarrollo de informes con Java sobre diferentes tipos de fuentes de datos (multiple data source).

Hace muchos años que empecé a realizar informes utilizando la herramienta de iReport, pero no es la que voy a utilizar hoy ya que sus desarrolladores han cambiado de plataforma para el nuevo proyecto con Jaspersoft Studio, es decir, se pasan a Eclipse cuando antes iReport funcionaba sobre Netbeans Platform.

Con JasperReports podemos crear informes complejos que incluyan gráficos, imágenes, subinformes, … Podemos acceder a nuestros a través de JDBC, TableModels, JavaBeans, XML, Hibernate, CSV,… La publicación y exportación de los informes puedes a ser una gran variedad de formatos, desde el clásico PDF a RTF, XML, XLS, CSV, HTML, XHTML, text, DOCX o OpenOffice.

Jaspersoft Studio

JasperReports con Jaspersoft Studio

 

Jaspersoft Studio is the free, open source, eclipse-based report designer for JasperReports and
JasperReports Server.

 
 
 

Esto es lo que vamos a ver

  1. INSTALACIÓN Y CONFIGURACIÓN BÁSICA
  2. DEFINIENDO UNA FUENTE DE DATOS CON POSTGRESQL
  3. TABLA Y CONSULTA PARA EL INFORME
  4. CREAMOS NUESTRO PRIMER INFORME CON JASPERREPORTS
  5. DISEÑAMOS NUESTRO PRIMER INFORME


 

1. INSTALACIÓN Y CONFIGURACIÓN BÁSICA

Vamos a instalar Jaspersoft Studio en nuestro equipo, lo podemos descagar en http://community.jaspersoft.com/project/jaspersoft-studio/releases solo nos pedirán un registro de usuario.

Una vez en nuestro sistema ejecutamos la instalación y listo, este el aspecto que tiene nuestro generador de informes:

Jasper Reports - Empezando

Jasper Reports – Empezando

Estos son los detalles de Tibco la empresa autora de JasperSoft Studio que se engloba dentro de los desarrollos de una de sus filiales Tibco JasperSoft:

Jasper Reports - Jaspersoft Studio

Jasper Reports – Jaspersoft Studio


 

2. DEFINIENDO UNA FUENTE DE DATOS CON POSTGRESQL

Si no dispones de una instalación de PostgreSQL no te preocupes puedes utilizar otra base de datos lo único que tendrás que añadir será el driver propio de la conexión a esa base de datos y los datos de la conexión como voy a indicar a continuación para PostgreSQL.

Si quieres instalar y obtener información sobre PostgreSQL la puedes obtener en mi guía sobre PostgreSQL, la misma información también la tienes disponible en mi guía sobre MySQL (MariaDB).

Echas las presentaciones vamos al grano para eso necesitamos definir en primer lugar la fuente de datos que vamos a utilizar, por eso vamos a ver como creamos un nuevo Data Adapter JDBC para nuestra conexión con PostgreSQL:

Jasper Reports - Nuevo Data Adapter JDBC

Jasper Reports – Nuevo Data Adapter JDBC

Usamos el Wizard de Jaspersoft Studio seleccionando Database JDBC Connection:

Jasper Reports - Data Adapter JDBC - Wizard

Jasper Reports – Data Adapter JDBC – Wizard

Seleccionamos la conexión Database JDBC Connection, donde damos un nombre a nuestra conexión y definimos la localización de la base de datos como se muestra en la imagen:

Jasper Reports- Data Adapter JDBC - Database Location

Jasper Reports- Data Adapter JDBC – Database Location

Desde aquí también podemos definir otras propiedades de nuestra conexión en Connection Properties:

Jasper Reports - Data Adapter JDBC - Connection Properties

Jasper Reports – Data Adapter JDBC – Connection Properties

Para hacer el test solo nos queda indicar la localización del driver de la base de datos que estamos utilizando en nuestro ejemplo, en mi caso utilizo PostgreSQL, y lo añado indicando la carpeta donde se encuentra instalado, si quieres usar otra base de datos deberás descargar el driver e indicar su localización:

Jasper Reports - Data Adapter JDBC

Jasper Reports – Data Adapter JDBC

Una vez completados los datos, evaluamos que hemos introducido correctamente todos los parámetros con la opción Test:

Jasper Reports - Data Adapter JDBC - Database Location Test

Jasper Reports – Data Adapter JDBC – Database Location Test

Una vez finalizado este último paso ya tenemos configurada una fuente de datos que podremos seleccionar y utilizar para diferentes informes que realizamos sobre esa conexión.


 

3. TABLA Y CONSULTA PARA EL INFORME

Para este ejemplo utilizo una tabla del desarrollo de Learning Project para PostgreSQL, si quieres descargarte la base de datos de 8 tablas que utilizo para este proyecto y los datos para su población, lo puedes hacer aquí:
 


 

 
Para hacerlo más fácil para este ejemplo, puedes también simplemente crear esta tabla sin relaciones adicionales, ya que lo que buscamos es introducirnos en el desarrollo de JasperReports con Jaspersoft Studio:

CREATE TABLE cb_country
(
  idcountry serial NOT NULL,
  country character varying(100) NOT NULL,
  description character varying(255),
  countrycode character(2) NOT NULL,
  hasregion character(1) NOT NULL DEFAULT 'N'::bpchar,
  regionname character varying(60),
  expressionphone character varying(20),
  displaysequence character varying(20) NOT NULL,
  isdefault character(1) DEFAULT 'N'::bpchar,
  ibannodigits numeric,
  ibancountry character varying(2),
  isactive boolean NOT NULL DEFAULT true,
  idlanguage character varying(6),
  idcurrency integer,
  CONSTRAINT pk_cb_country PRIMARY KEY (idcountry),
  CONSTRAINT un_cb_country_countrycode UNIQUE (countrycode) 
);
ALTER TABLE cb_country  OWNER TO xulescode;
COMMENT ON TABLE cb_country
IS 'Tabla donde se definen todos los países con sus características principales: idioma, nombre, ..., y diferentes datos íntrinsecos a cada país.';

Algunos países para que puedas poblar está tabla de forma sencilla:

INSERT INTO cb_country (idcountry, country, description, countrycode, hasregion, regionname, expressionphone, displaysequence, isdefault, ibannodigits, ibancountry, isactive, idlanguage, idcurrency) VALUES (270, 'United States', 'United States of America', 'US', 'Y', 'State', 'Y', '@C@, @R@ @P@', 'Y', NULL, '', true, 'en_US', 7);
INSERT INTO cb_country (idcountry, country, description, countrycode, hasregion, regionname, expressionphone, displaysequence, isdefault, ibannodigits, ibancountry, isactive, idlanguage, idcurrency) VALUES (273, 'Belgium', 'Belgium', 'BE', 'N', '', '', 'B-@P@ @C@', 'N', 16, 'BE', true, NULL, 7);
INSERT INTO cb_country (idcountry, country, description, countrycode, hasregion, regionname, expressionphone, displaysequence, isdefault, ibannodigits, ibancountry, isactive, idlanguage, idcurrency) VALUES (274, 'Holland', 'Holland', 'NL', 'N', '', 'Y', 'NL @P@ @C@', 'N', 18, 'NL', true, 'nl_NL', 7);
INSERT INTO cb_country (idcountry, country, description, countrycode, hasregion, regionname, expressionphone, displaysequence, isdefault, ibannodigits, ibancountry, isactive, idlanguage, idcurrency) VALUES (276, 'Switzerland', 'Switzerland', 'CH', 'N', '', '', 'CH-@P@ @C@', 'N', 21, 'CH', true, 'de_CH', 7);
INSERT INTO cb_country (idcountry, country, description, countrycode, hasregion, regionname, expressionphone, displaysequence, isdefault, ibannodigits, ibancountry, isactive, idlanguage, idcurrency) VALUES (277, 'Austria', 'Österreich', 'AT', 'N', '', '', 'A-@P@ @C@', 'N', 20, 'AT', true, 'de_AT', 7);

Si quieres más, aquí tiene el script para hacer un INSERT en la tabla creado con 240 países:


 

La consulta que utilizaremos para este informe será un SELECT sobre todos los campos de la tabla, ya que la selección de campos lo haremos al crear el informe. Estamos simplificando lo más posible la consulta para centrarnos en el desarrollo y creación de informes, ya que se puede utilizar la consulta con toda la complejidad que necesitemos, incluyendo la llamada a funciones procedurales.

Esta es la que utilizaremos en la creación del informe en el siguiente apartado:

SELECT idcountry, country, description, countrycode, hasregion, regionname, 
       expressionphone, displaysequence, isdefault, ibannodigits, ibancountry, 
       isactive, idlanguage, idcurrency
  FROM cb_country
  ORDER BY country;

Y estos algunos de los resultados que obtenemos ejecutando la consulta en un gestor de bases de datos en este caso PgAdmin:

Jasper Reports - Resultado consulta sobre cb_country

Jasper Reports – Resultado consulta sobre cb_country


 

4. CREAMOS NUESTRO PRIMER INFORME CON JASPERREPORTS

Empezaremos con nuestro primer informe con JasperSoft Studio seleccionando una de las plantillas base para el diseño, para empezar seleccionamos New Report (nuevo informe) y ya podemos seleccionar la plantilla que utilizaremos:

Jasper Reports - New Report - Select Template

Jasper Reports – New Report – Select Template

En el siguiente paso se nos indica la carpeta donde se guardará nuestro informe que tendrá un formato jrxml, de momento dejamos la configuración por defecto e introducimos el nombre de nuestro informe en mi caso i_cb_countries.jrxml:

Jasper Reports - New Report - Report name

Jasper Reports – New Report – Report name

Ahora el Wizard nos permite que seleccionemos un Data Source, aquí seleccionamos el que creamos anteriormente:

Jasper Reports - New Report - Select Data Source

Jasper Reports – New Report – Select Data Source

Añadimos la consulta tal y como se nos indica, puedes copiar directamente el SQL que te proporcioné con anterioridad:

Jasper Reports - New Report - Añadimos la consulta (Add Query)

Jasper Reports – New Report – Añadimos la consulta (Add Query)

Es momento de seleccionar los campos que queremos mostrar en el informe, esto es el procedimiento habitual, ya que hay que campos que puedes necesitar en el informe para condicionar como se muestran los resultados, por ejemplo, pero que no quieres que se muestren directamente en el informe:

Jasper Reports - New Report - Selección de campos

Jasper Reports – New Report – Selección de campos

Aquí puedes ver los campos que yo he seleccionado para este informe:

Jasper Reports - New Report - Campos seleccionados

Jasper Reports – New Report – Campos seleccionados

El último apartado del Wizard nos permite crear grupos, esta opción es muy interesante y útil para agrupar resultados por una de las columnas, para este sencillo informe lo dejaremos en blanco y ya entraremos en profundidad más adelantes:

Jasper Reports - New report - No definimos ningún grupo (Group By - Blank)

Jasper Reports – New report – No definimos ningún grupo (Group By – Blank)

Generamos el informe pulsando el botón de Finish y nos saldrá el aviso de la correcta creación de nuestro informe:

Jasper Reports - New Report - FIN

Jasper Reports – New Report – FIN


 

5.DISEÑAMOS NUESTRO PRIMER INFORME

Ya hemos creado nuestro informe, ahora mismo puedes pulsar el botón Preview y se ejecutará el informe por defecto en la vista previa que viene integrada en Jaspersoft Studio, así es como se ven el informe que hemos creado:

Jasper Reports - New Report - Diseño (Design)

Jasper Reports – New Report – Diseño (Design)

En la siguiente imagen te detallo las partes más importantes del generador de informes:

Jasper Reports - Partes principales del generador de informes

Jasper Reports – Partes principales del generador de informes

Vamos a hacer unos cambios sencillos para ir familiarizándonos con el entorno y aprendiendo como se trabaja con el desarrollo de informe con Jaspersoft Studio.


 

Editor de consultas SQL

Con JasperReports y en concreto desde la aplicación JasperSoft Studio podemos actualizar la consulta en cualquier momento, esto nos va a permitir añadir nuevos campos si se nos olvidó alguno, o cambiar la consulta por completo si es necesario.

Para modificar la consulta pulsa el botón que se indica en la imagen y se abrirá un editor donde podrás editar la consulta:

Jasper Reports - New Report - Diseño - Edición de consulta SQL (Query Editor)

Jasper Reports – New Report – Diseño – Edición de consulta SQL (Query Editor)

También tiene otras funcionalidades adicionales como: editor gráfico de consulta, añadido de parámetros, ordenación, …, esto lo veremos con más detalle cuando necesitemos profundizar en el diseño de informes con JasperReports.


 

Diseño – Editor de expresiones (Expression editor)

Inicialmente en nuestro informe vamos a tener etiquetas (Label) y expresiones (Expressions), en la paleta del diseñador los verás como Static Text y Text Field respectivamente.

Para añadir un nuevo Text Field simplemente arrástralo desde la paleta al informe, este añadirá el elemento al informe, este tiene una expresión que nos permitirá hacer referencia a los elementos de la base de datos: fields ($F{database-field}), y también, a otro tipo de expresiones como son parámetros (parameters: $F{parameter}) y valores calculados ($V{variable}).

Para abrir el editor puedes hacer click sobre el elemento que quieras modificar y te aparecerá la siguiente ventana:

Jasper Reports - New Report - Diseño - Editor de expresiones (Expression editor)

Jasper Reports – New Report – Diseño – Editor de expresiones (Expression editor)


 

Diseño – Editar etiquetas (Label)

Las etiquetas (Label) son los Static Text que nos permitirán añadir texto plano a nuestro informe y enriquecer nuestro diseño mediante la modicación de la fuente, tamaño, colores, … , todo esto se encuentra dentro de las propiedades de Static Text. Una vez añadida la etiqueta a nuestro informe también podemos modificar el texto directamente sobre el generador:

Jasper Reports - New Report - Diseño - Editar etiquetas (Label)

Jasper Reports – New Report – Diseño – Editar etiquetas (Label)


 

Fin del Diseño

Como podrás ver en mi informe finalizado he modificado los nombre de las columnas que son Static Text y actualizado también los campos de la cabecera y el pié de página, te recomiendo que explores añadiendo y modificando campos para familiarizarte con el programa JasperSoft Studio, aquí está mi informe finalizado:

Jasper Reports - New Report - Diseño - FIN

Jasper Reports – New Report – Diseño – FIN


 

Vista previa del informe

Vamos a ver como queda el informe finalmente, para ello JasperSoft Studio incorpora un botón de Preview para visualizar nuestro informe con JasperReports dentro del programa, como se muestra en la imagen.

Jasper Reports - New Report - Diseño - Vista previa (Preview)

Jasper Reports – New Report – Diseño – Vista previa (Preview)


 

Vista previa en formato PDF

Este mismo informe lo podemos ejecutar y mostrar en varios formatos simplemente indicando la salida que queremos para la ejecución de nuestro informe, ahora vamos a ver como generar la salida en PDF, como ves en la imagen selecciona esta opción y ejecuta nuevamente el informe pulsando el botón Preview:

Jasper Reports - New Report - Diseño - Vista previa en PDF

Jasper Reports – New Report – Diseño – Vista previa en PDF

Si lo has realizado verás como se abre automáticamente el informe en PDF, la vista previa también aparece visible tal y como vimos anteriormente. Si tienes curiosidad puedes descargar aquí el resultado final del informe en PDF:


 

Código fuente jrxml

Para finalizar puedes echar un vistazo al código fuente de nuestro informe en formato jrxml que es lo que interpreta el diseñador de informes, cualquier modificación que realices aquí se trasladará directamente al diseñador:

Jasper Reports - New Report - Diseño - Código fuente (Source)

Jasper Reports – New Report – Diseño – Código fuente (Source)

Espero que te haya sido útil

22 respuestas en “Creando informes en Java con JasperReports desde Jaspersoft Studio

  1. Alejandro Martinez

    Hola, como estas? Muy buenos posts!
    Pregunta… estoy haciendo un proyecto para la universidad en NetBeans 8.1. Esta vinculado a una base de datos hecha en mysql. Hasta ahí todo bien. Ahora tenía pensado emitir reportes y había pensado en JasperReports para ello pero cuando empezas este post comentás que se pasaron a Eclipse. La pregunta sería si hay alguna manera de utilizar algunas librerías de jasperreports en esta versión de NetBeans o bien hay alguna versión de NetBeans que funciones con cierta versión de las librerías?
    Mis pruebas llegaron hasta instalar netbeans 7.4 y levantar las librerías de jasperreports versión 5.5 pero tampoco logro emitir un reporte…
    Desde ya muchas gracias!
    Saludos!

    1. Julio Yáñez Novo Autor de la entrada

      Hola Alejandro.

      Lo que han cambiado es la herramienta para el desarrollo gráfico de informes, no confundas la utilización de una plataforma para la creación de un proyecto con el uso de un IDE, tanto Eclipse como Netbeans tienen unas plataformas para el desarrollo de software, es decir, iReport utiliza Netbeans Platform y Jasper Studio utiliza Eclipse Platform.

      Por lo tanto el cambio de la herramienta gráfica no influye para nada en la utilización de Jasper Reports en cualquier entorno ya sea Eclipse, Netbeans, …

      Puedes utilizar las librerías de Jasper Reports en cualquier proyecto independientemente de la versión de Netbeans, los problemas que estas teniendo me imagino que vendrán derivados de que te falta alguna librería por incorporar a tu proyecto Netbeans, ten en cuenta que Jasper Reports utiliza muchas librerías de terceros, y por esto tienes que incluir estas librerías en tu proyecto Netbeans, desde los drivers de la conexión a la base de datos, a las librerías de xml, iText, dom, …, que utiliza.

      Espero que con esto te encamine a solucionar tus problemas, cuando soluciones tus problemas (que lo harás), coméntalo aquí, gracias.

      Tengo previsto publicar un ejemplo de ejecución de informes desde Java, pero hasta Agosto no lo podré publicar debido a que estoy liado con otros proyectos.

      Saludos!

  2. Raúl

    Hola buenos dias, gracias por el tutorial, tengo una aplicación web que genero tras pasarle varios parametros en PDF y no tengo ningun problema.
    La cuestión es que ahora necesito que sea el propio usuario quien introduzca un parametro, como puedo capturarlo para continuar con la SQL ?
    Lo tengo dentro de un

    Gracias

    1. Julio Yáñez Novo Autor de la entrada

      Hola Raúl.

      Esta respuesta se me quedó en el tintero, esta cuestión que planteas es más un problema de gestión web que de JasperReports en sí mismo, desconozco tu aplicación, pero lo que deberías hacer es crear un form donde captures los parámetros necesarios para tu informe y el submit ejecutar dinámicamente la creación del informe mediante el paso de los parámetros capturados.

      Saludos, perdón por tardar tanto en responder.

    1. Julio Yáñez Novo Autor de la entrada

      Hola Carlos.

      Muchas gracias por tu valoración, para establecer una conexión con Oracle puedes utilizar una conexión con JDBC tal y como he hecho yo en este ejemplo con PostgreSQL, simplemente necesitas los valores para establecer la conexión típicos: usuario, clave, puerto, dirección,… , al seleccionar Oracle el propio JasperSoft Studio ya te presenta el formato adecuado para la conexión. Tienes que incluir el driver de Oracle y los datos de la conexión sería algo así (Link con explicaciones de la conexiones JDBC en inglés):

      Oracle (thin driver)
      Ÿ Driver: oracle.jdbc.OracleDriver
      Ÿ Sample URL: jdbc:oracle:thin:@mydb_hostname.com:1521:your_db_instance_name
      Ÿ Sample URL: jdbc:oracle:thin:@remotehost:1521:orcl
      Ÿ Standard format: jdbc:oracle:thin:@//HOSTNAME[:PORT]/SERVICE

      Nota: no suelo trabajar con Oracle habitualmente, pero según tengo entendido JasperReports solo soporta oracle 11g y 12c, con el driver de Oracle 10g, esto ya lo tienes que investigar tú porque no conozco bien los problemas con versiones antiguas de Oracle.

      Espero que te sirva de ayuda.

      Saludos.

  3. Eduardo

    Hola. Tengo un report con origen de datos un xml en local y no me muestra los campos, cargados. Los tengo en teoría bien referenciados en la descripción correspondiente con el XPath completo. En la configuración del Data Adapter tengo marcado “Usar la expresión XPath” y el test de conexión lo realiza bien. ¿A que puede ser debido?. Gracias.

  4. carlos jimenez

    Buenas noches, estoy tratando de hacer reportes pero ya me he roto la cabeza mas de 10 veces, tengo un problema al pasar parametros a mi reporte, lo mas curioso es que ya he realizado 6 de los cuales 4 solo hacen consulta y no necesita parametros para la consulta y los otros dos si les he puesto parametros pero me dieron problemas no me ejecutaba pero tampoco me mostraba error y de repente estos ya se podian mostrar , no se como hacer con el resto necesito ayuda urgente puesto que estoy realizando una tesis

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *