Está en la página 1de 21

Cómo Imprimir Informes Personalizados en formato PDF desde Código PL/SQL

en Oracle Apex 5

Written by Clarisa Maman Orfali

Todos los que hemos trabajado en desarrollar aplicaciones ya sean


para escritorio como web, se nos presenta un requerimiento
determinante que es el de poder imprimir los reportes que se crean
en la aplicación.

Es por ello que al trabajar con Oracle APEX siendo una herramienta
sin costo embebida en la base de datos Oracle, siempre he
investigado diferentes formas de poder imprimir los reportes y que
sean sin costo.

Es por ello que en esta oportunidad les traigo una solución muy
interesante basada en un paquete construido en puro PL/SQL llamado
jrxml2pdf que nos permite mostrar reportes PDF listos para imprimir
desde nuestra aplicación en APEX y para construir el reporte que
queremos imprimir en formato PDF vamos a trabajar con una
herramienta gráfica gratuita y Open Source llamada iReport Designer.

Paquete PL/SQL jrxml2pdf


El paquete PL/SQL jrxml2pdf es una solución escrita en código
PL/SQL puro y que genera archivos PDF tomando la información
desde la tabla jrxml-report-definition el cual nos permite ingresar el
código XML del reporte creado y lo mejor de todo es que no se
necesita ningún middleware.

Podemos diseñar nuestros reportes gráficamente y muy


sencillamente usando iReport Designer, como lo veremos en un
momento, y con unos simples pasos mostrar dichos reportes en
nuestras aplicaciones en APEX.

Este paquete fue escrito por Andreas Weiden basándose en el


paquete AS_PDF3 escrito por Anton Scheffer y el tipo de licencia que
maneja es la GLP y MIT las cuales se encuentran descriptas en el
paquete.

Descargar Paquete

Descargamos el Paquete jrxml2pdf en nuestra PC desde el siguiente


link: http://sourceforge.net/projects/pljrxml2pdf/ (en mi caso lo
descargaré en el escritorio) y lo descomprimimos.

Instalar el paquete jrxml2pdf


Siguiendo el procedimiento de instalación del paquete necesitamos
realizar los siguientes pasos:

1. Conceder permisos a UTL_FILE al usuario donde se instalará el paquete:


GRANT EXECUTE ON UTL_FILE TO <esquema donde vamos a
instalar el paquete jrxml2pdf>
2. Abrimos una ventana de comandos CMD (si estamos en Windows) y nos
ubicamos en el directorio de instalación del paquete: en mi caso ->
C:\Users\Admin\Desktop\jrxml2pdf-release\install y
abrimos el SQLPlus.
3. Ejecutamos el Script de Instalación: @install.sql

Después de instalar el paquete podemos ver los objetos instalados


desde el Explorador de Objetos del Taller de SQL de APEX o desde el
SQL Developer si usamos esta herramienta para trabajar con los
objetos de la base de datos, si expandimos los Paquetes, vemos que
se agregaron los que corresponden al paquete jrxml2pdf:
Descargar e Instalar iReport Designer

iReport es una poderosa herramienta de diseño visual para


JasperReports, con esta herramienta gráfica podemos crear informes
que cumplan con los más complejos requerimientos de información,
además que es intuitivo, poderoso y muy fácil de usar.

Descargar iReport Designer

El link de descarga es:


http://community.jaspersoft.com/project/ireport-designer/releases

Seleccionamos la versión 4.8.0 (no está probado el paquete en las


últimas versiones)
http://sourceforge.net/projects/ireport/files/iReport/iReport-4.8.0/

Seleccionamos el enlace que corresponde al archivo comprimido


iReport-4.8.0.zip
Y si no nos descarga el archivo hacemos clic en el enlace direct link
(marcado con una línea roja en la imagen de abajo), y de esa forma
se abre la ventana de descarga del archivo.

Guardamos la carpeta comprimida en nuestra PC y luego la


descomprimimos y creamos un acceso directo al escritorio del
ejecutable del programa que se encuentra dentro de la carpeta
iReport-4.8.0/bin/ireport.exe.

Compatibilidad de JDK con iReport

El JDK 8 no es compatible con iReport, necesitamos disponer del JDK


7.

Si en nuestra PC no disponemos del JDK 7, ingresamos a la página de


Oracle para descargar el kit e instalarlo en nuestra PC.
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-
downloads-1880260.html

Seleccionamos el JDK que corresponda a nuestro Sistema Operativo.

El entorno en el cual estoy trabajando para este artículo es Windows


7 de 32bits, entonces descargamos la versión:

jdk-7u79-windows-i586.exe.

Ejecutamos el instalador e instalamos el JDK en nuestra PC.

Asignar el JDK 7 a iReport


Puede darse el caso de que al hacer doble clic en el icono para abrir
el programa de iReport Designer, se muestre el splash de inicio pero
finalmente no se abra el programa.

Para que el programa se abra necesitamos indicarle el java home en


el archivo de configuración del iReport.
Primero buscamos la ruta del jdk7, el cual para este ejemplo
corresponde a:

C:\Program Files\Java\jdk1.7.0_79

Luego, ingresamos a la carpeta donde se encuentran los archivos del


iReport-4.8.0.-

Por ejemplo si tenemos la carpeta en el escritorio:

C:\Users\Admin\Desktop\iReport-4.8.0

Hacemos doble click en la carpeta etc y abrimos con un editor de


textos el archivo ireport.conf.

Debajo de la línea: #jdkhome="/path/to/jdk"

Ingresamos la siguiente línea:

jdkhome="C:\Program Files\Java\jdk1.7.0_79"

Guardamos el archivo y lo cerramos.

Ahora podemos ejecutar el programa y nos mostrará la página de


inicio.
Ingresar el archivo jrxml2pdf.jar en iReport-classpath

Ingresamos a la página de inicio del iReport y seleccionamos Tools en


el menú de opciones y luego seleccionamos Options.

Seleccionamos la ficha Classpath y hacemos clic en el botón Add JAR.

Y buscamos el driver jrxml2pdf.jar dentro de la carpeta donde


hayamos descargado el paquete en mi caso lo descargué en el
escritorio: C:\Users\Admin\Desktop\jrxml2pdf-
release\java_for_ireport y hacemos clic en el botón Open.
Luego hacemos clic en el botón OK para cerrar la ventana.

Crear Conexión a la Base de Datos desde iReport

Desde la Página de Inicio del iReport, seleccionamos el Step 1, se


abre una ventana emergente y seleccionamos la opción Database
JDBC connection.

Hacemos clic en el botón Next >

Database JDBC connection:

 Name: apex-demo
 JDBC Driver: Oracle (Oracle.jdbc.driver.OracleDriver)
 JDBC URL: jdbc:oracle:thin:@localhost:1521:XE
 Credentials

o Username: mi_username
o Password: mi_password

Probamos la conexión, haciendo clic en el botón Test.

Podemos guardar la conexión haciendo clic en el botón Save. (Solo a


modo de estudio)

Crear el Reporte en iReport Designer


En esta sección vamos a aprender a crear un reporte básico usando
iReport Designer, para que pueda ser invocado más adelante en
nuestra aplicación en APEX.

Hacemos doble clic en el icono del escritorio iReport para lanzar el


programa.

Nos conectamos a la base de datos con la conexión creada


anteriormente, que la habíamos denominado apex-demo.

Hacemos clic en el Step 2 para crear un nuevo reporte y que se inicie el asistente.

1. Seleccionar Template

Se abre el asistente y seleccionamos el template Coffee Landscape, y hacemos


clic en el botón Launch Report Wizard:

2. Nombre y Ubicación
1. Report Name: reporte-empleados
2. Location: C:\Users\Admin\Documents\iReport
3. File: C:\Users\Admin\Documents\iReport\reporte-empleados.jrxml

4. Hacemos clic en el botón Next >

3. Consulta SQL (Query)


1. Connections / Data Sources: apex-demo
2. Query (SQL): Hacemos clic en el botón Design query y
seleccionamos la tabla EMP para crear la consulta SQL. (Destildamos
los campos HIREDATE y DEPTNO)

Hacemos clic en el botón Ok y luego hacemos clic en el


botón Next >

4. Fields: Mostrar todos los campos de la Tabla


Hacemos clic en el botón Next >

5. Agrupar por (Group By…)

No seleccionamos nada.
Hacemos clic en el botón Next >
Finalmente hacemos clic en el botón Finish.

Se abre el IDE del iReport Designer donde visualizamos el reporte y podemos editar
cada sección (band) del mismo.

Veremos cómo editar el reporte para que podamos mostrarlo en


nuestra aplicación en Apex.

Podemos observar que el IDE de iReport tiene 4 paneles iniciales:

 El panel de la izquierda se refiere al Report Inspector (A) que es


el que contiene una lista de todos los archivos y parámetros del
reporte.
 El Panel central que es el Diseñador del Reporte (B).
 El panel de la derecha contiene la Paleta de Elementos que
podemos usar en nuestros reportes y el recuadro de
propiedades del elemento seleccionado (C).
 El panel inferior muestra la salida del reporte y si se tiene algún
error (D).

Todas estas ventanas las podemos reordenar a nuestro gusto.

Personalizar el Reporte

Desde el panel central del diseñador del reporte, eliminamos las dos
imágenes, tanto la de la mancha de café como los granos de café,
simplemente seleccionamos los elementos con el mouse y los
eliminamos.

Posteriormente ingresamos una imagen en la esquina superior


derecha.

Hacemos clic en el icono de imagen en el panel de la derecha donde


se encuentra la paleta de elementos y lo arrastramos al sector (band)
del Title en el panel central.

Seleccionamos otra imagen y hacemos lo mismo y la colocamos en el


lado izquierdo.

Además dichas imágenes las podemos dejar copiadas en la misma


carpeta donde se guarda el reporte, en mí caso los nombres de las
imágenes son: apex1.jpg y apex2.jpg.
Nota: El paquete acepta los siguientes tipos de formatos de imagen:
GIF, JPG y PNG, por otro lado, no está soportado el uso de canal alfa
en las imágenes ya que se muestran distorsionadas en el reporte PDF
y por último las imágenes deben ser de 24bit (las imágenes de 8bit
grayscale no están soportadas tampoco)

Una vez que hayamos colocado cada imagen en el reporte, ajustamos


la medida de las mismas para que quede alineado con la tabla del
reporte.

Seleccionamos el elemento Coffee Title y cambiamos el nombre por


“Listado de Empleados” y el Subtítulo colocamos por ejemplo:
“Reporte Demo creado con iReport”, es muy posible que tengamos
que adaptar los tamaños de las casillas del texto estático.

Modificamos la justificación del texto estático que se encuentra


debajo del subtitulo o lo podemos simplemente eliminar.

Para cambiar las propiedades de estos elementos lo hacemos desde


el panel de la izquierda el cual podemos cambiar el tipo de letra, el
tamaño, ubicación y otras propiedades.
Además también modificamos los encabezados de cada columna,
mostrándose el resultado de las modificaciones en la siguiente
imagen:

Para pre-visualizar el reporte hacemos clic en el botón Preview que se


encuentra en la parte superior del panel central del diseñador.
De esta forma podemos visualizar el reporte recién creado en
iReport:

Una vez creado el reporte se generan dos archivos dentro del


directorio donde originalmente indicamos que se guardara el archivo:

reporte-empleados.jrxml y reporte-empleados.jasper

Nosotros vamos a usar el XML generado en el archivo “reporte-


empleados.jrxml” para que sea importado en la aplicación en APEX.

Expresiones no soportadas en el paquete PL/SQL del iReport

No todas las expresiones usadas en el reporte que hemos diseñado


en iReport están soportadas por el paquete jrxml2pdf, es por eso que
es muy importante revisar la documentación del paquete para evitar
errores en la visualización del reporte cuando lo mostremos desde la
aplicación en APEX.

En el panel de la izquierda del IDE de iReport referente al “Report


Inspector” expandimos Styles y luego expandimos Row, esta
expresión es la que coloca el color de fondo en las filas de la tabla en
forma alternada y que es parte del template que seleccionamos como
base para crear nuestro reporte.
$V{REPORT_COUNT}%2 == 0

Este tipo de expresión no está soportada en el paquete jrxml2pdf,


para ello vamos a cambiar la expresión por la siguiente:

jrxml2pdf.Wrappers.mod($V{REPORT_COUNT},2) == 0

Recompilamos el reporte y realizamos la pre-visualización del mismo


y podemos observar que las filas se siguen mostrando con color en
forma alternativa pero ahora utiliza una expresión que sí está
soportada por el paquete.

Importar Imágenes en la tabla JRXML_REPORT_IMAGES

Todas las imágenes que usemos en los reportes que creamos con
iReport necesitamos ingresarlas en la tabla correspondiente de
almacenamiento de imágenes que viene con el paquete jrxml2pdf.

Ingresamos al SQL Developer e insertamos un nuevo registro por


cada imagen usada.
Tener en cuenta que necesitamos cargar las imágenes como BLOB y
con el mismo nombre que tienen en las imágenes que usamos en
iReport.
Importar el Reporte a nuestra base de datos

Vamos a cargar el reporte creado en iReport Designer a nuestra base


de datos:

1. Desde el Reporte creado (reporte-empleados.jrxml) verificamos


que al presionar el botón Preview se vea bien el PDF, el cual
muestra todo el listado de Empleados.
2. Hacemos clic en el botón XML (que está al costado izquierdo del
botón Preview) y copiamos todo el código XML en memoria con
Ctrl + a
Abrimos el SQL Developer, posteriormente seleccionamos la tabla
JRXML_REPORT_DEFINITIONS, y luego hacemos clic en la ficha Datos
para ingresar un nuevo registro:
1. Hacemos clic en el icono Insertar Fila
1. JRD_ID: añadimos un nuevo número según la secuencia
que exista.
2. JRD_NAME: Colocamos aquí el nombre del reporte (es
muy importante esta columna y además debemos tener
en cuenta de no colocar caracteres especiales ni espacios)
en mi caso lo llamaré Empleados.
3. JRD_DESCRIPTION: podemos dejar este campo en blanco
o colocar una descripción del reporte.
4. JRD_XML: aquí es donde debemos colocar todo el código
XML que habíamos copiado del reporte en iReport
Designer.
2. Hacemos clic en el icono Commit para que el registro sea
creado.
Abrir Oracle APEX

Ya tenemos en una tabla todo el código XML del reporte que creamos
en iReport Designer.

Ahora vamos a crear una aplicación en APEX y una página con el


reporte de Empleados y un botón que diga Imprimir Reporte.

La consulta de origen del Informe Interactivo es:

select EMPNO as “ID”,


ENAME as “NOMBRE”,
JOB as “JOB”,
MGR as “MANAGER”,
SAL as “SALARY”,
COMM as “COMMISSION”
from EMP EMP
Crear Proceso para Impresión del Reporte

Desde el Diseñador de Página hacemos clic en la ficha Procesamiento


del panel de la izquierda y creamos un nuevo proceso:

1. En la sección Identificación
1. Nombre: Imprimir Reporte
2. Tipo: Código PL/SQL

2. En la sección Origen

Código PL/SQL:

DECLARE
vcName VARCHAR2(200);
lParams SCHEMA.PK_JRXML2PDF_REPGEN.TPARAMLIST;
bl BLOB;
BEGIN
vcName := 'nombre-reporte';
bl := SCHEMA.PK_JRXML2PDF_REPGEN.FK_RUN(i_vcName=>vcName);
SCHEMA.PK_JRXML2PDF_REPGEN.PR_SHOW_REPORT(bl);
APEX_APPLICATION.STOP_APEX_ENGINE;
END;

3. En la sección Condición
1. Si Se Hace Clic en el Botón: IMPRIMIR

4. Guardamos todos los cambios hacienda clic en el botón


Guardar

Ejecutamos la Página y podemos ver que el reporte se visualiza


correctamente en nuestra aplicación en APEX.

También podría gustarte