Creacion de Reportes con JasperReports y iReports (Java Escritorio)

Frecuente deseamos ver reportes sobre los datos que se generan en el sistema y, en ocasiones, se encuentran almacenados en nuestra base de datos.

Para ello existe una opción para la creación de estos reportes: JasperReports. JasperReports es un API OpenSource que nos permite generar reportes en formatos PDF, XML, HTML, CSV, XLS, RTF, y TXT con solo unas cuantas líneas de código y guardar este reporte en un archivo, enviarlo por un OutputStream, o mostrarlo directamente con un visor especial (si usamos una aplicación swing).

reporte

1. La Base de Datos

Pues bien para esto vamos a empezar creando una base de datos llamada prueba_reportes y ahí dentro crear una tabla llamada persona y agregarle algunos datos para poder hacer pruebas.

CREATE DATABASE prueba_reportes
WITH OWNER = sergio
ENCODING = 'UTF8'
--------------------
CREATE TABLE persona
(
 per_id serial NOT NULL,
 per_nombre character varying(20),
 per_apellido character varying(20),
 per_edad integer,
 CONSTRAINT persona_pkey PRIMARY KEY (per_id)
)
WITH (
 OIDS=FALSE
);
ALTER TABLE persona
 OWNER TO sergio;

1_tabla_llena

2. El reporte

Para ello tenemos que ir descargando iReports Designer, lo podemos hacer desde su página oficial. Este programa nos permite diseñar el estilo del reporte, es decir, la forma en cómo van a quedar las columnas y filas, color, estilo de fuente y además las consultas que se van a hacer a la base de datos.

Cuando ya hemos instalado iReports Designer lo ejecutamos y creamos un nuevo Datasource así: Click en el icono resaltado azul (Report Datasources).

2_

Allí nos abre una ventana llamada “Connections/Dataources”, entonces seleccionamos “New” para crear uno nuevo y luego seleccionamos el tipo de datasource el cual es un “Database JDBC Connection”

3_

Ahora proporcionamos los datos requeridos para el nombre del datasource, luego el tipo de dirver que se ha de usar teniendo en cuenta la base de datos a la cual nos vamos a conectar. Y más abajo damos el url con el nombre de la base de datos y luego el usuario y contraseña propietarios de la base de datos.

1_db

Cuando hacemos esto damos en la opcion “Test” para probar la conexion y si esto es exitoso le damos “Save” para guardar este datasource.

Ahora que ya hemos hecho esto, vamos a crear un reporte.

Para ello nos vamos a File -> New. Y allí seleccionamos una plantilla para usar con nuestros reportes. La seleccionamos y le damos “Launch Report Wizard”. En mi caso yo usaré la plantilla Simple Blue.

1_newreport

Ahora le damos damos un nombre y una ubicación para guardarlo…

1_name

luego tenemos que ingresar el query o consulta que nos va a devolver la informacion que vamos a mostrar. En mi caso algo simple. Consultar todos los campos de la tabla.

1_query

Damos en siguiente, seleccionamos los campos que queremos mostrar en el reporte.1_fields

Ahora nos permite agruparlos, pero para hacerlo simple, no vamos a hacer uso de esto. Lo dejamos todo en limpio. y damos en siguiente y ahora si podemos dar en finish.

1_finish

Hecho esto, tenemos que modificar el diseño del reporte. No nos vamos a detener mucho aquí. Y cuando ya la hemos modificado los titulos y nombre de columnas. Damos click en “Preview” y allí nos va a mostrar una vista previa del reporte.

1_preview

3. La aplicación en eclipse

Para crear la aplicacion que genere reportes debemos crear un proyecto y agregarle las librerias necesarias. Todas estas las podemos descargar desde aquí. Estas son la librerías que deben agregarse:

1_librerias

Estas librerías las agregamos al proyecto. En mi caso trabajo con eclipse entonces debemos crear una carpeta llamada lib y ahí dentro pegamos todas la liberías anteriores y tambien debemos agregar la librería (Driver) para conectar la aplicacion con la base de datos.

Esta es la estructura del proyecto:

1_estruct_proy
Estructura Proyecto – 1

En la ilustración Estructura Proyecto – 1 ser observa el folder que creamos llamado lib el cual contiene todas las librería anteriormente mencionandas y tambien en la raiz del proyecto hemos pegado una copia del archivo que generamos en el iReport Designer, es decir, el archivo que contiene el diseño del reporte. Cuando guardamos el diseño en dicho programa se generó este archivo el ruta que indicaba anteriormente.

Ahora veamos en más detalle la estructura del proyecto:

1_estruct_proy_detalle
Estructura Proyecto – 2

En la ilustración Estructura Proyecto – 2 se observan todas las librerías. Y también las dos clases que debemos crear dentro de un paquete. Estas dos clases se llaman Principal y ConexionBD.

Vamos a la clase ConexionBD que sirve para conectarse a la base de datos.


package org.uscosoft.reporte;

import java.sql.Connection;
import java.sql.DriverManager;

public class ConexionBD {
	
	private Connection conexion = null;
	private String urlBD = "jdbc:postgresql://localhost:5432/prueba_reportes";
	private String userBD = "sergio";
	private String passBD = "gaspar";
	
	
	public Connection getConexion() throws Exception{
		Class.forName("org.postgresql.Driver");
        conexion = DriverManager.getConnection(urlBD, userBD, passBD);
		return conexion;
	}
	
}//fin class


Ahora la clase Principal: contiene lo necesario para generar los reportes.

1_class_ppal

Y este es el contenido:


package org.uscosoft.reporte;

import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

public class Principal {


	public static void main(String[] args) throws Exception {

		ConexionBD cbd = new ConexionBD();
		java.util.Scanner teclado = new java.util.Scanner(System.in);

		JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile("reportedeprueba.jasper");
		JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, cbd.getConexion());

		System.out.print("Ingrese la opcion... ");
		String opcion = teclado.next();

		if(opcion.equals("guardar")){
			JRExporter exporter = new JRPdfExporter();
			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reportePDF.pdf"));
			exporter.exportReport();
			System.out.println("Ya está guardado");
		}

		if(opcion.equals("ver")){
			JasperViewer viewer = new JasperViewer(jasperPrint);
			viewer.setTitle("Mi Rporte");
			viewer.setVisible(true);
			System.out.println("Ya está listo para ver");
		}

		System.out.println("Aplicacion Finalizada");

	}//fin main

}//fin class


Veamos una explicación breve del código:

JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile("reportedeprueba.jasper");

Lo que estamos haciendo es crear un objeto de JasperReport y cargarle el archivo .jasper que habiamos generado.

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, cbd.getConexion());

Ahora creamos un objeto JasperPrint que nos sirve para ser visualizado, y a este objeto le pasamos el reporte (objeto anteriormente creado) y tambien le pasamos los parametros (no tiene parámetros, o sea, null) y le pasamos la fuente donde están los datos, es decir, la conexion a la base de datos.

En este punto nos encontramos con una condición (es opcional, no necesaria) que nos pregunta si queremos guardarlo directamente en el disco ó si queremos visulizarlo primero. Entonces en el caso que escojamos guardar hace lo siguiente.

Ahora declaramos una referencia a un objeto de tipo “JRExporter” de la siguiente forma:

JRExporter exporter = new JRPdfExporter();

Será esta referencia la que usaremos de ahora en adelante. Para que nuestro reporte sea guardado en formato PDF creamos un objeto de tipo “JRPdfExporter” y lo asignamos a nuestra referencia exporter:

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reportePDF.pdf"));
exporter.exportReport();

La primer línea asigna a nuestro objeto “exporter” el “jasperPrint”(el reporte con datos) que creamos anteriormente. La segunda línea le dice al “exporter” cuál será el nombre del archivo generado (en este caso “reportePDF.pdf”). Recuerden cambiar el nombre y la extensión del archivo cada vez que cambiemos de formato. La última línea es la que realiza el proceso de exportación.

Bien, en el caso que hayamos escogido la opción ver pues se creará un objeto de JasperViewer llamado viewer que lo que nos permirte es generar una vista previa del objeto jasperPrint.

JasperViewer viewer = new JasperViewer(jasperPrint);
viewer.setTitle("Mi Reporte");
viewer.setVisible(true);

Y a esta vista previa le asignamos un titulo y luego la volvemos visible.

4. Ejecución de la aplicación

Aquí cuando escogemos la opcion “guardar”, se genera el archivo .pdf que hemos indicado en el código. El arhivo es generado en la misma ruta del proyecto, en la raiz del proyecto.

1_ejecucion_guardar

Ahora si escogemos la opción ver, se crea una vista previa del archivo generado y es mostrada en una nueva ventana. Esta nueva ventana tiene varias opciones entre ellas está la de guardar el archivo.

1_ejecucion_ver

Bien eso ha sido todo por ahora. En otro post, más adelante, veremos como generarlos para java web.

Video tutorial aquí:

asd

Anuncios

2 comentarios en “Creacion de Reportes con JasperReports y iReports (Java Escritorio)

  1. muy buenas.

    tengo una duda lo que pasa es que quiero hacer un reporte individual de cada usuario.

    le explico estoy desarrollando un software y tengo una tabla donde se muestran todos los registros ya hize el reporte de todos los usuarios que hay registrados pero uiero hacer un reporte de cada individuo por aparte con su historial de asistencia, el software consiste en un control de asistencia. si tiene una forma de como hacer para hacer el reporte por persona me gustaria saber.

    gracias por su colaboracion

    Me gusta

  2. ¿Sabias que eres un maldito genio? Había visto muchísimos vídeos y explicaciones acerca de como generar un reporte y me has dado la solución, muy bien explicado sobre todo a mi que soy cabezota.

    Has salvado mi cuatri, porque justo dentro de 1 día entrego mi proyecto y esto me faltaba.

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s