Hace un tiempo he escrito este articulo usando APEX 5 y la herramienta Open Source iReport Designer, en esta oportunidad actualizo esta artículo para implementar esta solución utilizando oracle APEX 22.1 y Jaspersoft Studio 6.16.0.

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 Jaspersoft Studio, 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 PL-jrxml2pdf en nuestra PC desde el siguiente link: http://sourceforge.net/projects/pljrxml2pdf/ y lo descomprimimos.

Instalar el paquete PL-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 –> D:\PL JRXML2PDF\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:

Crear Conexión a la Base de Datos desde Jaspersoft Studio

Desde la Página de Inicio de Jaspersoft Studio, seleccionamos File –> New –> Data Adapter.

Se abre el asistente para crear un nuevo Data Adapter.

Ingresamos un nombre y hacemos clic en el botón Next.

Seleccionamos Database JDBC Connection

Hacemos clic en el botón Next.

Database JDBC connection:

  • Name: apexdev
  • JDBC Driver: Oracle (Oracle.jdbc.driver.OracleDriver)
  • JDBC URL: jdbc:oracle:thin:@localhost:1521/XEPDB1
  • Credentials
    • Username: mi_username
    • Password: mi_password

Antes de terminar con el asistente hacemos clic en el tab Driver Classpath y hacemos clic en el botón Add.

Añadimos el archivo jar de la instalación del paquete, en mi caso se encuentra en: D:\PL JRXML2PDF\jrxml2pdf-release\java_for_ireport

Nota: además debemos tener el archivo ojdbc6.jar para que funcione la conexión.

Regresamos al tab Database Location. Luego hacemos clic en el botón Test.

Crear el Reporte en Jaspersoft Studio

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

Hacemos clic en File –> New –> Jasper Report

  1. Seleccionar Template

Se abre el asistente y seleccionamos el template Coffee Landscape, y hacemos clic en el botón Next.

  1. Nombre y Ubicación
  • File Name: reporte-empleados
  • Location: la ubicación que deseemos en nuestra instalación de Jaspersoft Studio

Hacemos clic en el botón Next.

Seleccionamos el Adaptador, que yo lo nombré como apexdev.

En la ventana Data Source expandimos el Data Adapter y en tablas seleccionamos la tabla EMP y arrastramos a la sección Diagrama. (Destildamos los campos HIREDATE y DEPTNO)

Hacemos clic en el botón Next.

En la sección Fields:pasamos todos los campos en el siguiente cuadrante.

Hacemos clic en el botón Next.

En la sección Group By, no seleccionamos nada.

Hacemos clic en el botón next y luego en el botón Finish.

Se abre el IDE de Jaspersoft Studio 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 tiene 4 paneles iniciales:

  • El panel de la izquierda se refiere al Outline panel que es el que contiene una lista de todos los archivos y parámetros del reporte y el repositorio como la lista de los adaptadores disponibles (caja verde).
  • El Panel central que es el Diseñador del Reporte (caja roja).
  • El panel de la derecha contiene la Paleta de Elementos que podemos usar en nuestros reportes y el recuadro de propiedades del elemento seleccionado (caja rosada).
  • El panel inferior muestra la salida del reporte y si se tiene algún error (caja celeste).

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.

 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 Jaspersoft Studio”, 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 inferior del panel central del diseñador.

De esta forma podemos visualizar el reporte recién creado en Jaspersoft Studio:

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 Jaspersoft 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 Jaspersoft referente al “Outline Panel” 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 eliminar dicha expresion.

Recompilamos el reporte y realizamos la pre-visualización del mismo y podemos observar que las filas no estan coloreadas.

Para ver las expresiones soportadas por el paquete necesitamos revisar la documentación del mismo.

Importar Imágenes en la tabla JRXML_REPORT_IMAGES

Todas las imágenes que usemos en los reportes que creamos con Jaspersoft 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 Jaspersoft. Realizar el commit para que se inserten los dos registros en la tabla JRXML_REPORT_IMAGES.

Importar el Reporte a nuestra base de datos

Vamos a cargar el reporte creado en Jaspersoft Studio 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 jaspersoft Studio.
  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 jaspersoft Studio.

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 "CODIGO",
  ENAME as "NOMBRE",
  JOB as "ROL",
  MGR as "MANAGER",
  SAL as "SALARIO",
  COMM as "COMMISION"
from 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;
  1. En la sección Condición
    1. Si Se Hace Clic en el Botón: IMPRIMIR
  2. 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:

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

Hasta Pronto!