Cómo Imprimir Informes Personalizados en formato PDF desde Código PL/SQL en Oracle Apex 5 - Oracle Wiki - Oracle - Toad World

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

Oracle Community

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. Smile

 

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
    • Username: mi_username
    • 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.

 


 

 

Resumen

 

Como hemos visto a lo largo de todo este artículo, podemos crear reportes PDF listos para imprimir y sin costo asociado.

 

Hemos aprendido a:

 

  • Descargar e instalar iReport Designer
  • Crear un reporte básico en iReport
  • Descargar e Instalar el paquete PL/SQL jrxml2pdf
  • Implementar el paquete en nuestra aplicación en APEX
  • Conocer algunas limitaciones del paquete

 

4893 8 /
Follow / 16 Mar 2016 at 5:54pm

Excelente Clarisa. Como todos sus post, muy claro, simple de entender y muy útil. Ya hice el laboratorio en mi trabajo y funciona a la perfección.

Dos detalles adicionales que vamos a inspeccionar:

1-Envío de parámetros

2-Ejecutar el reporte en una ventana o navegador diferente.

Muchas gracias.

Follow / 8 Jun 2016 at 9:19pm

Muchas gracias por el feedback!!!! Saludos!!!

Follow / 30 Aug 2016 at 8:28pm

me gusta mucho tu post Clarisa. me pregunto si me pudieras indicar porque al instalar el paquete  @install.sql  este me muestra errores de compilación los paquetes se crean en mi esquema al cual le indico pero me muestran errores no se si te paso alguna vez o me podrías indicar que paso estaré realizando mal.

Follow / 30 Aug 2016 at 11:51pm

Con respecto a la instalación ya logre hacer andar los reportes pero realice la prueba en una bd express edition en una enterprise no me funciono me quedaron desconmpilados los paquetes

Follow / 16 Sep 2016 at 4:00am

pportillo, la verdad no se por que te ha pasado eso, no me ha pasado a mi, no puedo ayudarte en esta instancia, puede ser cualquier cosa. Te recomiedo que visites el foro de preguntas del paquete y lo consultes alli: sourceforge.net/.../

Saludos