Está en la página 1de 21

Cmo Imprimir Informes Personalizados en formato PDF desde Cdigo 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 aplicacin.
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 solucin muy
interesante basada en un paquete construido en puro PL/SQL llamado
jrxml2pdf que nos permite mostrar reportes PDF listos para imprimir
desde nuestra aplicacin en APEX y para construir el reporte que
queremos imprimir en formato PDF vamos a trabajar con una
herramienta grfica gratuita y Open Source llamada iReport Designer.
Paquete PL/SQL jrxml2pdf
El paquete PL/SQL jrxml2pdf es una solucin escrita en cdigo
PL/SQL puro y que genera archivos PDF tomando la informacin
desde la tabla jrxml-report-definition el cual nos permite ingresar el
cdigo XML del reporte creado y lo mejor de todo es que no se
necesita ningn middleware.
Podemos
disear
nuestros
reportes
grficamente
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 basndose 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 instalacin 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 instalacin del paquete: en mi caso ->
C:\Users\Admin\Desktop\jrxml2pdf-release\install y
abrimos el SQLPlus.
3. Ejecutamos el Script de Instalacin: @install.sql

Despus 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 diseo visual para
JasperReports, con esta herramienta grfica podemos crear informes
que cumplan con los ms complejos requerimientos de informacin,
adems que es intuitivo, poderoso y muy fcil de usar.
Descargar iReport Designer
El link de descarga es:
http://community.jaspersoft.com/project/ireport-designer/releases
Seleccionamos la versin 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 lnea 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 pgina de
Oracle para descargar el kit e instalarlo en nuestra PC.
http://www.oracle.com/technetwork/java/javase/downloads/jdk7downloads-1880260.html
Seleccionamos el JDK que corresponda a nuestro Sistema Operativo.
El entorno en el cual estoy trabajando para este artculo es Windows
7 de 32bits, entonces descargamos la versin:
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 configuracin 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 lnea: #jdkhome="/path/to/jdk"
Ingresamos la siguiente lnea:
jdkhome="C:\Program Files\Java\jdk1.7.0_79"

Guardamos el archivo y lo cerramos.


Ahora podemos ejecutar el programa y nos mostrar la pgina de
inicio.

Ingresar el archivo jrxml2pdf.jar en iReport-classpath


Ingresamos a la pgina 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 botn 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\jrxml2pdfrelease\java_for_ireport y hacemos clic en el botn Open.

Luego hacemos clic en el botn OK para cerrar la ventana.


Crear Conexin a la Base de Datos desde iReport
Desde la Pgina de Inicio del iReport, seleccionamos el Step 1, se
abre una ventana emergente y seleccionamos la opcin Database
JDBC connection.

Hacemos clic en el botn Next >


Database JDBC connection:

Name: apex-demo

JDBC Driver: Oracle (Oracle.jdbc.driver.OracleDriver)


JDBC URL: jdbc:oracle:thin:@localhost:1521:XE
Credentials

o
o

Username: mi_username
Password: mi_password

Probamos la conexin, haciendo clic en el botn Test.

Podemos guardar la conexin haciendo clic en el botn Save. (Solo a


modo de estudio)
Crear el Reporte en iReport Designer

En esta seccin vamos a aprender a crear un reporte bsico usando


iReport Designer, para que pueda ser invocado ms adelante en
nuestra aplicacin en APEX.
Hacemos doble clic en el icono del escritorio iReport para lanzar el
programa.
Nos conectamos a la base de datos con la conexin creada
anteriormente, que la habamos 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 botn Launch Report Wizard:
2. Nombre y Ubicacin
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 botn Next >


3. Consulta SQL (Query)

1. Connections / Data Sources: apex-demo


2.
Query (SQL): Hacemos clic en el botn Design query y
seleccionamos la tabla EMP para crear la consulta SQL. (Destildamos
los
campos
HIREDATE
y
DEPTNO)

Hacemos clic en el botn Ok y luego hacemos clic en el


botn
Next
>
4.

Fields: Mostrar todos los campos de la Tabla

Hacemos clic en el botn Next >


5.
No

Agrupar

por
seleccionamos

(Group

By)
nada.

Hacemos

clic

en

el

botn

Next

>

Finalmente hacemos clic en el botn Finish.


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

Veremos cmo editar el reporte para que podamos mostrarlo en


nuestra aplicacin 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 parmetros del
reporte.

El Panel central que es el Diseador 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 algn
error (D).

Todas estas ventanas las podemos reordenar a nuestro gusto.

Personalizar el Reporte
Desde el panel central del diseador del reporte, eliminamos las dos
imgenes, 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.
Adems dichas imgenes las podemos dejar copiadas en la misma
carpeta donde se guarda el reporte, en m caso los nombres de las
imgenes 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 imgenes ya que se muestran distorsionadas en el reporte PDF
y por ltimo las imgenes deben ser de 24bit (las imgenes de 8bit
grayscale no estn 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 Subttulo colocamos por ejemplo:
Reporte Demo creado con iReport, es muy posible que tengamos
que adaptar los tamaos de las casillas del texto esttico.
Modificamos la justificacin del texto esttico 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
tamao, ubicacin y otras propiedades.
Adems tambin modificamos los encabezados de cada columna,
mostrndose el resultado de las modificaciones en la siguiente
imagen:

Para pre-visualizar el reporte hacemos clic en el botn Preview que se


encuentra en la parte superior del panel central del diseador.

De esta forma podemos visualizar el reporte recin 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 reporteempleados.jrxml para que sea importado en la aplicacin en APEX.
Expresiones no soportadas en el paquete PL/SQL del iReport
No todas las expresiones usadas en el reporte que hemos diseado
en iReport estn soportadas por el paquete jrxml2pdf, es por eso que
es muy importante revisar la documentacin del paquete para evitar
errores en la visualizacin del reporte cuando lo mostremos desde la
aplicacin en APEX.
En el panel de la izquierda del IDE de iReport referente al Report
Inspector expandimos Styles y luego expandimos Row, esta
expresin 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 expresin no est soportada en el paquete jrxml2pdf,


para ello vamos a cambiar la expresin por la siguiente:
jrxml2pdf.Wrappers.mod($V{REPORT_COUNT},2) == 0
Recompilamos el reporte y realizamos la pre-visualizacin del mismo
y podemos observar que las filas se siguen mostrando con color en
forma alternativa pero ahora utiliza una expresin que s est
soportada por el paquete.
Importar Imgenes en la tabla JRXML_REPORT_IMAGES
Todas las imgenes que usemos en los reportes que creamos con
iReport necesitamos ingresarlas en la tabla correspondiente de
almacenamiento de imgenes 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 imgenes como BLOB y


con el mismo nombre que tienen en las imgenes 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 botn Preview se vea bien el PDF, el cual
muestra todo el listado de Empleados.
2. Hacemos clic en el botn XML (que est al costado izquierdo del
botn Preview) y copiamos todo el cdigo 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: aadimos un nuevo nmero segn la secuencia
que exista.
2. JRD_NAME: Colocamos aqu el nombre del reporte (es
muy importante esta columna y adems 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 descripcin del reporte.
4. JRD_XML: aqu es donde debemos colocar todo el cdigo
XML que habamos copiado del reporte en iReport
Designer.
2. Hacemos clic en el icono Commit
creado.

para que el registro sea

Abrir Oracle APEX


Ya tenemos en una tabla todo el cdigo XML del reporte que creamos
en iReport Designer.
Ahora vamos a crear una aplicacin en APEX y una pgina con el
reporte de Empleados y un botn 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 Impresin del Reporte


Desde el Diseador de Pgina hacemos clic en la ficha Procesamiento
del panel de la izquierda y creamos un nuevo proceso:
1. En la seccin Identificacin
1. Nombre: Imprimir Reporte
2. Tipo: Cdigo PL/SQL
2. En la seccin Origen
Cdigo 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 seccin Condicin
1. Si Se Hace Clic en el Botn: IMPRIMIR
4.
Guardamos todos los cambios hacienda clic en el botn
Guardar
Ejecutamos la Pgina y podemos ver que el reporte se visualiza
correctamente en nuestra aplicacin en APEX.