Como crear Reportes en Java con Imagenes desde una Base de Datos

Como crear Reportes en Java con Imagenes desde una Base de Datos

En este Articulo veremos como crear reportes en Java utilizando algunas librerias como IcePDF(Visor PDF), Jasperreports(Crear Reportes) y diseñando una plantilla con ireport designer. Realizaremos un ejemplo utilzando imagenes, estas representaran fotos de empleados y estaran almacenadas en una base de datos, para realizar la conexion con la Base de Datos utilizaremos el conector de mysql para java. El reporte consistira de la imagen del empleado, nombre, tipo, ciudad y descripcion de el empleado. Veamos entonces como crear reportes en Java 😀  comencemos…

Requerimientos

Desarrollo

Para comenzar a ver como crear reportes en java mediante un ejemplo vamos primero a ver el procedimiento por encima para comprender lo que necesitamos y lo que vamos
a hacer.

  • Escenario

Tenemos informacion almacenada en una tabla de una base de datos, es una tabla llamada personas donde se almacena informacion relacionada con cada persona y una foto.

como crear reportes en java 1

  • Problema

Queremos realizar una aplicacion capaz de leer la informacion de esa tabla, generar reportes en PDF y visualizarlos dentro de esta aplicacion.


¿Sabías que?

¿Necesitas aprender algo nuevo ? Ve a Udemy, busca el tema del que quieres aprender, selecciona el curso para ti y continua con tu aprendizaje.

Udemy

  • Solucion

Primero que nada necesitamos crear un nuevo proyecto en Netbeans con la siguiente estructura:

como crear reportes en java 2

El paquete proceso tiene las clases:
BaseDatos: Informacion relacionada con la manipulacion de la informacion de la base de datos.
Consulta: Interfaz Necesaria para crear los Reportes, contiene la informacion que se mostrara en los reportes.
Main: Clase Principal.
El paquete vista tiene las siguientes clases:
Ventana: Es una JFrame con un menu para generar reportes y un panel principal donde se generara la interfaz para visualizar el PDF llamado panel_reportes

  • Librerias Necesarias

Para crear reportes en Java necesitaremos agregar a nuestro proyecto algunas librerias necesarias, estas librerias estan para descargar arriba en la seccion de
requerimientos. Necesitamos en concreto estas librerias para relizar 3 cosas en nuestra aplicacion:
Visor PDF: icepdf-core y icepdf-viewer
Crear Reportes: Todas las incluidas en el archivo comprimido jasper.rar
Conector Mysql con Java: mysql-connector-java-5.0.8-bin

  •  Declaraciones
//reportes
SwingController controlador;
//base de datos
BaseDatos bd;

En resumen el procedimiento para crear reportes en java es:

  • 1.Preparar la Interfaz que visualiza el PDF

Aqui necesitaremos realizar 3 cosas, detener el Controlador Swing, destruir el controlador Swing y limpiar componentes de el panel, dibujar GUI en el panel.


public void detener() {
	if (controlador != null) {
		controlador.closeDocument();
	}

}

public void destruir() {
	if (controlador != null) {
		controlador.dispose();
		controlador = null;
	}

	panel_reportes.removeAll();
}

public void dibujarGIU(){
	controlador=new SwingController();
	SwingViewBuilder factory=new SwingViewBuilder(controlador);
	controlador.getDocumentViewController().setAnnotationCallback(
			new org.icepdf.ri.common.MyAnnotationCallback(
					controlador.getDocumentViewController()));

	MyAnnotationCallback myAnnotationCallback = new MyAnnotationCallback(
			controlador.getDocumentViewController());
	controlador.getDocumentViewController().setAnnotationCallback(myAnnotationCallback);

	panel_reportes.setLayout(new BorderLayout());
	JScrollPane scroll = new JScrollPane(factory.buildViewerPanel(),JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

	panel_reportes.add(scroll, BorderLayout.CENTER);   
}
  • 2.Obtener Informacion de la base de datos y Generar el PDF.

LinkedList info;
info=bd.getInformacion();
try 
{ 
	JasperReport reporte=null;
	reporte = (JasperReport) JRLoader.loadObject(new File("plantilla.jasper")); 
	JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new JRBeanCollectionDataSource(info));
	JRExporter exporter = new JRPdfExporter(); 
	exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
	exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("Documentos/temporal.pdf")); 
	exporter.exportReport(); 
} 
catch(JRException e) 
{ 
	JOptionPane.showMessageDialog(null, e.getMessage(),"Error al generar PDF", JOptionPane.ERROR_MESSAGE);
	Logger.getLogger(Ventana.class.getName()).log(Level.SEVERE, null, e);
}

Primeramente crearemos una lista de tipo Consulta, que sera la clase que usaremos para almacenar la informacion de la base de datos, esta clase luce asi:


public class Consulta {
    private String idPersona;
    private String Nombre;
    private String tipo;
    private String ciudad;
    private String descripcion;
    private Image foto;

    public String getIdPersona() {
        return idPersona;
    }

    public String getNombre() {
        return Nombre;
    }

    public String getTipo() {
        return tipo;
    }

    public String getCiudad() {
        return ciudad;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public Image getFoto() {
        return foto;
    }

    public void setIdPersona(String idPersona) {
        this.idPersona = idPersona;
    }

    public void setNombre(String Nombre) {
        this.Nombre = Nombre;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public void setFoto(Image foto) {
        this.foto = foto;
    }   
}

A esta lista le asignamos el resultado, que es una lista tambien, de el metodo getInformacion de la clase donde tenemos la informacion de la base de datos, este metodo luce asi:


public LinkedList getInformacion(){
	LinkedList info = new LinkedList();
	Consulta consulta;
	try {
		ResultSet rs = st.executeQuery("SELECT * FROM Personas"); 
		while (rs.next())
		{
			consulta = new Consulta();
			//agregamos la informacion a el objeto consulta
			consulta.setIdPersona(rs.getObject("idPersona").toString());
			consulta.setNombre(rs.getObject("nombre").toString());
			consulta.setTipo(rs.getObject("tipo").toString());
			consulta.setCiudad(rs.getObject("ciudad").toString());
			consulta.setDescripcion(rs.getObject("descripcion").toString());
			Blob blob = rs.getBlob("foto");
			int blobLength=(int)blob.length();
			byte[] blobasbytes = blob.getBytes(1, blobLength);
			ImageIcon icon = new ImageIcon((byte[])blobasbytes);
			consulta.setFoto(icon.getImage());
			//agregamos nueva consulta a la informacion
			info.add(consulta);
		}
		rs.close();
		return info;
	} catch (SQLException ex) {
		Logger.getLogger(BaseDatos.class.getName()).log(Level.SEVERE, null, ex);
	}
	return null;
}

Despues utilizando los metodos de las librerias de JasperReports creamos el reporte utilizando una plantilla llamada plantilla.jasper que creamos con ireports Designer, mas adelante explicaremos como crear esta plantilla correctamente, por ahora seguimos explicando el codigo,


JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new JRBeanCollectionDataSource(info));

Llenamos el reporte utilizando la plantilla y la informacion en forma de colleccion de objetos de tipo Consulta que obtuvimos en el metodo anterior de la clase BaseDatos
Exportamos en la ruta Documentos/temporal.pdf

  • 3.Abrir y Visualizar el PDF

File file=new File("Documentos/temporal.pdf");
final String url =file.toURI().toString();
URL documentURL = null;
try {
	documentURL = new URL(url);
} catch (MalformedURLException e) {
}

if (documentURL != null) {
	controlador.openDocument(documentURL);
}

Aqui Abrimos el archivo temporal que creamos anteriormente y le decimos al controlador que lo abra.
Finalmente actulizamos el panel para que se reflejen los cambios.


panel_reportes.updateUI();
  • Crear la plantilla para el reporte en ireport Designer

En la linea


reporte = (JasperReport) JRLoader.loadObject(new File("plantilla.jasper")); 

Utilizamos una plantilla con extension .jasper, este archivo se crear con el programa ireports Designer, una vez instalado creamos un nuevo reporte blank A4 y lo llamaremos como quieramos yo lo llame plantilla

como crear reportes en java 3
Ahora vemos una hoja dividida en secciones damos click sobre la seccion «Page Header» y en «Band height» cambiamos el valor a 0, esto la eliminara

como crear reportes en java 4

Repetimos esto para todas las secciones excepto Title, Detail 1, Summary.

Despues Agregamos un texto estatico desde la paletta de herramientas y lo arrastramos a la seccion de Title

como crear reportes en java 5
Ahora vamos a agregar el campo para la foto vamos a la parte izquierda en Fields y con el boton derecho agregamos otro campo, con el boton derecho lo renombramos y escribimos el nombre de el campo que debe concordar con el campo en la
clase consulta, en las propiedades cambiamos el campo clase de String a Object

como crear reportes en java 6
Ahora agregamos un elemento de tipo Image desde la paleta de herramientas a la seccion Detail1 y nos muestra un dialogo para elegir imagen, simplemente cancelamos la operacion.
Despues en la propiedades agregamos $F{foto} en Image Expression, con el nombre que le pusiste al campo que creamos antes, donde ira la imagen, tambien cambiamos el valor de Scale Image a Fill Frame

como crear reportes en java 7
Luego vamos a agregar los demas campos que no son imagen, agregaremos el campo nombre, boton derecho en Field y agregamos, renombramos al nombre «nombre» igual como lo tenemos en la clase auxiliar Consulta y arrastramos a la seccion Detail1

como crear reportes en java 8
Despues simplemente seguimos agregando del mismo modo los demas valores

como crear reportes en java 9
Antes de Terminar cambiamos el valor de Language de Groovy a Java en las propiedades de el reporte.

como crear reportes en java 10
Finalmente guardamos nuestra plantilla, para esto solo vamos a la pestaña Preview y automaticamente se guardara en la carpeta que seleccionaste al inicio

como crear reportes en java 11

Solo copiamos el archivo plantilla.jasper que se genero a la raiz de nuestro proyecto Java y ejecutamos 😉

como crear reportes en Java jonathanmelgoza

Resultado


 

Clic para valorar esta información
[Total: 0 Promedio: 0]