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 com

0 downloads 118 Views 296KB Size

Recommend Stories


Crear tablas en una base de datos
Crear tablas en una base de datos TECNOLOGÍA LECCIÓN 2 ACCESS Contenido 1. ¿Qué es una tabla? ....................................................

MICROSOFT ACCESS. Conceptos básicos de Access. Componentes de una Base de datos. Crear una base de datos
MICROSOFT ACCESS Conceptos básicos de Access Base de datos: Una base de datos es un conjunto de datos que están organizados para un uso determinado y

BASE DE DATOS. Qué es una base de datos?
1 BASE DE DATOS ¿Qué es una base de datos? Una base de datos es una herramienta para recopilar y organizar información. En las bases de datos, se pue

OPERACIONES CON BASE DE DATOS EN EXCEL
OPERACIONES CON BASE DE DATOS EN EXCEL Se pretende con el presente trabajo en etapas, mostrar las posibilidades que ofrece Excel aplicadas a base de d

Gestión de los datos en una base de datos
Institución educativa JOSE HOLGUIN GARCES. Especialidad en Sistemas. Herramientas de Programación 1 Gestión de los datos en una base de datos. Una v

Creación de una base de datos de Videojuegos con Access
ACTIVIDADES BASES DE DATOS Creación de una base de datos de Videojuegos con Access Actividad 1: abriendo y reconociendo el entorno Busca en el menú in

Como Crear una cuenta Hotmail y Outlook
Como Crear una cuenta Hotmail y Outlook de Como Crear una cuenta de Hotmail y Outlook En estos tiempos es esencial contra con una cuenta de correo g

Story Transcript

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 :D comencemos...

Requerimientos      

Netbeans IDE iReport Designer Librerias IcePdf Librerias JasperReports Libreria Mysql Connector para Java Imagenes del Ejemplo

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.



Problema

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

Solucion

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

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(myAn notationCallback); panel_reportes.setLayout(new BorderLayout()); JScrollPane scroll = new JScrollPane(factory.buildViewerPanel(),JScrollPane.VERTICAL_SCROLLBAR_ALW AYS,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

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

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

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

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

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

Despues simplemente seguimos agregando del mismo modo los demas valores

Antes de Terminar cambiamos el valor de Language de Groovy a Java en las propiedades de el reporte.

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

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

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.