jueves, 7 de octubre de 2010

PDF con iReport+JSP

Estos PDF tienen la finalidad de mostrar resúmenes de datos desde una BD, en mi caso usaré Oracle, la creación de estos sera con iReport 3.5.3

Materiales:
- iReport 3.5.3
- Driver Oracle ojdbc14.jar
- NetBeans
- Librerías
- 1 paquete de cigarros Lucky de 20.

Inicio

Iniciaremos el iReport y nos presentará la siguiente interface. En ella nos iremos a Archivo>Nuevo




Nos mostrará el formato de hoja que vamos a querer para nuestro reporte, seleccionamos hoja carta (más adelante experimentarán solos con otros formatos).



En la pantalla que aparecerá a continuación, nos pedirá el nombre del proyecto y donde se guardará. Recomiendo que hagan una carpeta exclusiva para esto.



A continuación presentará la interface en la que trabajaremos con el iReport. Para hacer más fácil el entendimiento, la dividí en 4 áreas.

A.- Nos mostrará los elementos que hemos añadido a nuestro PDF (ya sea texto, gráficos, tablas, etc.)
B.- Área de diseño, acá arrastraremos los elementos que queremos ver en nuestro PDF.
C.- Es una paleta de elementos, cada uno de ellos puede ser arrastrado en "B" para ser visto con posterioridad en el PDF generado.
D.- Agrupa la barra de herramientas del iReport. Acá están los botones para agregar el driver de la BD, crear la consulta SQL, etc.



El siguiente paso es agregar el driver de nuestra BD para que el iReport se comunique con ella, recuerden que estamos trabajando con Oracle, por lo que el driver a usar es el ojdbc14.jar.

Iremos a Herramientas>Opciones>iReport>ClassPath.

Añadiremos un nuevo .jar



Ahora que nuestro driver está nuestro directorio, podemos crear una nueva conexión a nuestra BD.:

1.- Click en el icono de Report Datasources
2.- Click en New
3.- Seleccionar conexión JDBC
4.- Next :dalomismo



En la siguiente ventana, nos pedirá la configuración de esta nueva conexión, los datos pueden verse en el SS. Pueden dar click en test para probar si la configuración es exitosa.

Se ingresa el nombre de la conexión (la q quieran), seguido por el driver a usar (el de oracle) y la localización de nuestra BD, como es externa a mi PC, hay q indicar la IP, puerto y SID de esta.

Al finalizar usuario y clave con la q administran su cuenta de BD.



Diseño de Nuestro PDF

Ya tenemos todo configurado en el iReport, por lo que queda el diseño de nuestro pdf y configurar los datos que quiere que muestre de nuestra BD.

Para el ejemplo se listará los elementos de una tabla que tengo creada, esta tabla se llama PRODUCTOS y los atributos de esta tabla son: PLU, NOMBRE_PRODU, CANTIDAD_PRESENTE, AREA_PRODUCTO. Tanto el nombre de la tabla como el de los atributos serán de vital importancia a la hora de generar el PDF, tegan cuidado con las mayusculas y minusculas :zippy .


Vista de mi tabla producto, se uso sqldeveloper para administrar mi BD, no consieré para este ejemplo la columna ID_EXHIBICION


Anteriormente habiamos presentado la interface de trabajo del iReport.

En el lado "C" tendremos 2 herramientas fundamentales.

- Static Text: Sirve para escribir cualquier cadena de caracteres en el PDF, esta cadena se mostrará en el PDF generado sin ninguna modificación. Es como escribir en el Word. Se puede apreciar esto en el titulo del PDF "Listado de Productos". Este elemento vasta con tomarlos y arrastrarlos al área que desea colocarlos en el PDF.

- Text Field: Sirve para hacer referencia a los atributos de mi tabla Productos. Se aprecia en el ejemplo de abajo con los nombres de $F{PLU}, $F{NOMBRE_PRODU}, $F{CANTIDAD_PRESENTE}, $F{AREA_PRODUCTO}. Este elemento es integrado al PDF, solo tomándolo de "C" y arrastrándolo en "B". Solo tendrán q editar el contenido de "{}" por el atributo de la tabla.

ejemplo: Tomamos el Text Field de "C" y lo colocamos en "B" y aparecerá en el pdf como:
$F{field}

Hacemos 2 click en el elemento creado y si nuestro atributo en la tabla de nuestra BD se llama RUT, modificaremos el fiel como:
$F{RUT}


En el ejemplo de la foto esto se realizo 4 veces, 1 por cada atributo que quiero mostrar en mi PDF. Además verán que estos son registrados al lado "A" del iReport en la solapa Parámetros.


**Importante: Si queremos listar productos como en el presente ejemplo, los text field deben ir obligatoriamente en el área Detail 1, el Detail 1, se encargará de repetirse tantas veces como productos hay en mi BD para mostrarlos todos en forma de listado.





Es como un ciclo while q tiene como indice la cantidad de entradas de mi tabla**


Ahora vamos a hacer una linea de barata programación, para q muestre todos los elementos de mi tabla.

SELECT * FROM PRODUCTO

Inmediatamente el iReport relacionará los text field creados con el nombre de los atributos de mi tabla (es por eso importante haber creado bien los text field en el paso anterior).



Para comprobar lo hecho anteriormente, vamos a hacer un Preview al trabajo. Esto lo hacemos con el botón que se muestra en la foto, el resultado tb aparece ahí.


A modo de ejemplo lo dejaremos así de simple, pero se pueden agregar lineas, tablas, colores, etc. etc etc.


Cuando vemos que todo ha quedado como nos gusta, guardamos el proyecto Archivo>Guardar

Posteriormente procedemos a compilarlo, para ello apretamos el martillo que esta a la derecha de Preview. Si esto es satisfactorio, nos mostrará algo como esto:



En la carpeta donde creamos en un principio el proyecto se crearán 2 archivos, el primero es el proyecto en sí, sirve para futuras modificaciones y el segundo es el archivo .jasper compilado, el cual será usado en nuestro JSP.




Creación del JSP

La metodología de la generación del PDF será la siguiente:

Tendremos una pagina .jsp con un código de llamado a nuestro .jasper. Esta pagina JSP puede ser llamada desde un simple link.

En esta sección nos olvidaremos del iReport y comenzaremos a usar el NetBeans. En esta guía no se enseñará como crear un proyecto en este programa, ni mucho menos como crear las clases, ni paginas en JSP, se dará como sabido (y de hecho tiene q ser así, son temas de ramos como Base de Datos).

Para lanzar los PDF desde un JSP, tendremos que agregar a nuestro proyecto las siguientes librerías.


Nuestro report1.jasper se agregará a nuestro proyecto en su raíz.


Ahora la linea de código para lanzar el .jasper. Este es una pagina en .jsp que puede ser llamada desde un simple link.





Connection conn=null;
try
{
Class.forName("oracle.jdbc.driver.OracleDriver"); //se carga el driver
conn= DriverManager.getConnection("jdbc:oracle:thin:@sith.unap.cl:1521:sith","jfernandez","acá va la clave");
out.print("si se conecto");
}
catch (Exception ex)
{
ex.printStackTrace();
}

File reportFile = new File(application.getRealPath("report1.jasper"));

Map parameters = new HashMap();

byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath (),parameters,conn);

response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();


De todo ese código, tienen q modificar las 2 lineas que están entre los asteriscos con los datos de su conexión y el nombre de su reporte.


A modo de ejemplo de lo que se puede lograr con mayor tiempo:





Espero que les sea útil.



saludos
Raikonen.

No hay comentarios: