Una vez creados los
informes con iReport, tendremos que acceder a ellos desde nuestra aplicación
Java para poder mostrarlos al usuario.
En esta entrada veremos los
pasos básicos necesarios para mostrar un informe desde una aplicación Java.
Nota:
En este post se usará el informe creado en el post anterior, llamado serviciosAgrupados.
EJERCICIO GUIADO Nº 1. CREACIÓN DEL INFORME COMPILADO:
- Entra en NetBeans y
abra el informe haciendo clic
derecho en el archivo serviciosAgrupados.jrxml y luego escoger la
opción Abrir. (el informe serviciosAgrupados estará en el paquete en el que lo creó).
Los ficheros que contienen
un informe son ficheros del tipo .jrxml.
- Vamos a ver el aspecto
del informe. Pulse en Preview:
Ya sabe que en esta pestaña
Preview se usa la conexión activa y permite
visualizar el informe relleno con los datos de la base de datos, según la
consulta SQL que haya usado:
- Sin embargo, este
botón no solo sirve para visualizar el informe final, sino que además
actúa como compilador, generando un fichero del tipo .jasper.
Los ficheros .jasper
son informes compilados, de forma que puedan ser usados en aplicaciones java.
Cada vez que ha visualizado
un informe, ha generado sin darse cuenta un fichero .jasper, con el nombre
del informe que estaba visualizando. En nuestro ejemplo, acabamos de generar un
fichero serviciosAgrupados.jasper.
- Los ficheros .jasper
generados se almacenan dentro de la carpeta del paquete del proyecto
NetBeans en el que se creó; sin embargo, se puede configurar el programa
iReport para que los ficheros compilados se almacenen en otra carpeta, de
forma que estén más accesibles.
Para ello en NetBeans hacer
clic en Herramientas y luego en Opciones:
- En el cuadro de Opciones
que aparece active la pestaña iReport:
- Luego hacer clic en la pestaña Compilation and execution, desactivar la casilla Use Report Directory to compile,
luego dar clic en Browse:
7. Explorar y seleccionar la carpeta donde deseas guardar los archivos de informes compilados, es decir los
archivos con extensión .jasper.
Acepta los cambios.
8. A partir de ahora cada vez que visualice un informe el
fichero compilado se guardará en la carpeta que has configurado previamente. Lo
vamos a comprobar. Vuelva a visualizar su informe:
9. Acuda a la carpeta configurada previamente y compruebe que en ella hay ahora un fichero serviciosAgrupados.jasper.
Este es el fichero del informe compilado. Este fichero será el que usará para
visualizar informes desde java.
EJERCICIO GUIADO Nº 2. CONEXIÓN CON UN INFORME DESDE JAVA:
- Entra en NetBeans y
crea un nuevo proyecto Java. El proyecto se llamará PruebaInformes
y contendrá un paquetePrincipal. Este paquete a su vez contendrá
una VentanaPrincipal:
- Prepara tu proyecto
para que pueda acceder a la base de datos AMANUVA (ya sabes, crear el objeto
conexion, sentencia, etc.).
- Para que nuestro
programa sea capaz de presentar informes, crearemos una carpeta llamada informes dentro de la
carpeta del proyecto. Y dentro de dicha carpeta copiaremos los ficheros
.jasper de los informes que queremos utilizar. En nuestro caso, copiaremos
el fichero serviciosAgrupados.jasper que creamos en el apartado
anterior, dado que el informe en cuestión tiene una imagen también tendremos que pegar dicho archivo (leaf_banner_green.png).
Así pues crea la carpeta informes dentro de la carpeta de
proyecto y pega los ficheros serviciosAgrupados.jasper y leaf_banner_green.png dentro de ella.
- Crea un botón en la
ventana de tu proyecto. El botón contendrá el texto “Informe Agrupado” y
su nombre será btnInformeAgrupado:
- El objetivo es hacer
que aparezca el informe serviciosAgrupados cuando se pulse este
botón. Para ello, programe lo siguiente en el evento actionPerformed
del botón:
Este código le muestra muchos errores,
no se preocupe ahora de ellos. En los siguientes pasos se corregirán. De
momento lo que se va a hacer es explicar el código de este evento:
·
Lo primero que observará
es como se usa una variable rutaInforme para almacenar el camino
del informe que queremos mostrar. Observa que dicho informe se especifica con
el fichero .jasper generado con iReport, y que este fichero se encuentra
dentro de la subcarpeta informes.
·
A continuación viene una
línea donde se crea un objeto informe del tipo JasperPrint:
JasperPrint informe = JasperFillManager.fillReport(rutaInforme,
null, conexion);
·
Esta línea es la que
genera el informe que se va a mostrar. El informe en java es un objeto del tipo
JasperPrint
y es creado a través de otro objeto del tipo JasperFillManager.
·
Es interesante que
observes el uso de un método llamado fillReport (llenar informe) que se
encarga de llenar el informe con datos.
·
Este método necesita tres
parámetros:
-
El sitio donde se encuentra
el fichero del informe.
-
Los parámetros (null
en nuestro ejemplo. Los parámetros se estudiarán en próximas entradas de este
blog).
-
Y el objeto conexion,
que le permite a java acceder a la base de datos para recoger los datos que se
presentarán en el informe.
·
Una vez creado el objeto informe,
solo tenemos que presentarlo en pantalla. Los informes se presentan a través de
un objeto del tipo JasperViewer. Los objetos JasperViewer son ventanas donde se
muestran los informes.
JasperViewer ventanaVisor
= new JasperViewer(informe, false);
·
Esta línea de código crea
una ventana llamada ventanaVisor
donde se muestra el informe informe.
El parámetro false indica
que al cerrarse la ventana del informe no debe acabar el programa. Si este
parámetro fuera true, al cerrar la ventana del informe se cerraría el
programa entero (esto no interesa para lo que tratamos de enseñar).
·
El objeto ventanaVisor es una
ventana normal y corriente y puede ser visualizada con setVisible. Por otro lado, se le asigna el título “INFORME
DE SERVICIOS:” con el método setTitle.
·
Todo este código debe estar
rodeado de un try...catch para capturar errores inesperados.
- Todos los errores del
código se producen debido a que es necesario indicar los imports correspondientes a
las clases JasperPrint,
JasperFillManager, JasperViewer que participan en
el código.
Un import
es una línea de código que le dice a java en qué librería debe encontrar la
clase correspondiente.
Normalmente, al hacer clic
sobre la línea que da el error, aparece el icono de una bombilla pequeña en la
parte izquierda de la ventana. Al hacer clic sobre esta bombilla se nos informa
de la biblioteca que hace falta importar. Ya sabe que basta hacer clic sobre
esta biblioteca para que se añada la instrucción import correspondiente de
forma automática.
Sin embargo, si prueba esto
mismo con las líneas erróneas del código anterior, verá que no aparece ninguna
bombilla. Esto es debido a que las bibliotecas donde se encuentran las clases JasperPrint, JasperFillManager y JasperViewer no vienen incluidas en
NetBeans, ya que son clases
pertenecientes al programa iReport.
Así pues, NetBeans no sabe dónde
encontrar estas clases.
7. Para evitar este error, es necesario incluir en el
proyecto una serie de bibliotecas
propias del programa iReport. Esto se
hace de la siguiente forma:
8. Haga clic con el botón derecho del ratón sobre el
apartado Bibliotecas de tu
proyecto y luego active la opción Agregar
archivo JAR/Carpeta…:
9. Debe acudir al siguiente directorio C:\Users\EdwinAmado\AppData\Roaming\NetBeans\8.1\modules\ext (el texto que está en color púrpura debe ser el
usuario actual de su sistema operativo) para buscar en él las bibliotecas
necesarias:
10. Los ficheros que contienen las bibliotecas necesarias
para que este programa funcione correctamente son los siguientes:
·
sqljdbc42.jar
·
servlet-api-2.4.jar
·
joda-time-2.1.jar
·
jcommon-1.0.15.jar
·
groovy-all-2.0.1.jar
·
jfreechart-1.0.12.jar
·
commons-digester-2.1.jar
·
commons-collections-3.2.1.jar
·
commons-javaflow-20060411.jar
·
commons-logging-1.1.jar
·
jasperreports-javaflow-6.3.1.jar
De la lista anterior el primer archivo (sqljdbc42.jar)
se descarga de la página de Microsoft.
De la lista anterior el último archivo (jasperreports-javaflow-6.3.1.jar)
se descarga de la siguiente url: http://community.jaspersoft.com/project/jasperreports-library/releases
Todos los demás archivos ya estarán en el disco duro
de tu máquina después de haber instalado el IDE NetBeans en la siguiente ruta: C:\Users\EdwinAmado\AppData\Roaming\NetBeans\8.1\modules\ext
(el texto que está en color púrpura debe ser el usuario
actual de su sistema operativo).
Empezaremos añadiendo el fichero servlet-api-2.4.jar selecciónelo
y active Abrir:
11. Observará que se ha agregado el fichero a la zona de
bibliotecas:
12. Repita el proceso para agregar los otros 10 (diez)
ficheros necesarios. Al final, su zona de Bibliotecas debe quedar así (observe
los 11 ficheros añadidos):
13. Gracias a la inclusión de estos ficheros, nuestro
proyecto ya dispone de las bibliotecas que contienen a las clases que
necesitamos, que recuerda que son: JasperPrint, JasperFillManager,
JasperViewer.
Si ahora haces clic sobre la primera línea que da
error, verá como ahora NetBeans ya sabe el import que debe añadirse, y por
tanto aparecerá la bombilla. Pulse sobre la bombilla:
14. La línea de código para importar la clase JasperFillManager es:
import net.sf.jasperreports.engine.JasperFillManager;
15. La línea de código para importar la clase JasperPrint es:
import net.sf.jasperreports.engine.JasperPrint;
16. Y finalmente la línea de código para importar la clase
JasperViewer es:
import net.sf.jasperreports.view.JasperViewer;
17. Los errores han desaparecido. Ya puede ejecutar el
programa.
18. Si pulsa sobre el botón Informe Agrupado aparecerá el informe.
El informe aparece en una ventana (el visor de
informes – objeto JasperViewer) que tiene una pequeña barra de herramientas. En
esta barra podrá por ejemplo imprimir el informe, o cambiar su zoom, entre
otras cosas:
19. Tal como se ha programado este botón, al pulsarse se
visualiza el informe antes de que el usuario decida imprimirlo o no. En algunos
casos, puede ser interesante que el informe se imprima directamente sin que se
visualice antes.
Veamos cómo hacer esto. Primero añada otro botón btnImprimirDirectamente
a su ventana:
20.Ahora programe dentro de su evento actionPerformed lo siguiente:
El código es similar al anterior, solo que se elimina
todo uso del objeto JasperViewer (ventana visualizadora) ya que el
informe ya no debe salir en pantalla.
Además se añade una nueva línea:
JasperPrintManager.printReport(informe, true);
Esta línea usa una clase llamada JasperPrintManager
que se encarga de imprimir el informe informe
usando el método printReport.
Si el segundo parámetro tiene el valor true, entonces significa que
aparecerá el cuadro de diálogo de impresión:
Si estuviera a false,
este cuadro de diálogo no aparecería y el informe se enviaría directamente a la
impresora configurada por defecto en el ordenador.
En nuestro caso, al tener el valor true, este cuadro sí aparecerá.
21. Ejecute el programa y pruebe el nuevo botón. No hace
falta que imprima el informe.
CONCLUSIONES:
Para poder imprimir un informe creado con iReport desde una aplicación
Java es necesario agregar ciertas bibliotecas que utiliza el programa iReport:
sqljdbc42.jar
servlet-api-2.4.jar
joda-time-2.1.jar
jcommon-1.0.15.jar
groovy-all-2.0.1.jar
jfreechart-1.0.12.jar
commons-digester-2.1.jar
commons-collections-3.2.1.jar
commons-javaflow-20060411.jar
commons-logging-1.1.jar
jasperreports-javaflow-6.3.1.jar
Una vez agregadas estas bibliotecas, el proceso para imprimir un informe
es el siguiente:
-
Crear un objeto del tipo
JasperPrint (el informe).
-
Crear un objeto visor
(JasperViewer) que permita visualizar el informe.
-
O bien imprimir
directamente el informe con un objeto JasperPrintManager.
Hola, tengo un problema con la ruta de mi reporte, al copiar la aplicación o el jar en otra computadora y al dar click al botón para que lo generé me manda el error al cargar el reporte, he leído que el problema es la ruta, he hecho lo que dicen los tutoriales, sin embargo sigue ocurriendome el error, ¿que puedo hacer, por favor?
ResponderBorrarSaludos Clau:
BorrarDisculpa por la demora en la respuesta. Para solucionar lo que indicas tienes que crear en la otra computadora las carpetas exactamente como se indica en la ruta mostrada en el mensaje de error y pegar ahí el archivo .jasper de tu informe (reporte).
Este comentario ha sido eliminado por el autor.
ResponderBorrarMuchísimas gracias por tu aporte, fue bien recibido y sirvió de gran manera.
ResponderBorrarQue bien que te haya servido este post.
BorrarSuerte y adelante con la programación.
Siempre me faltaba una librería, con tu ayuda pude resolver gracias
ResponderBorrar