Impresión PDF en Oracle Apex

Introducción y arquitectura

Apex 3.0 introdujo la habilidad de exportar una región de reporte a formato PDF – esencialmente, imprimir un reporte. Esto es definido declarativamente y está disponible para todas las regiones de reporte. Los usuarios de Application Express ahora pueden ver e imprimir reporte con cabeceras de página que se repiten en cada página y contenido que se conforma propiamente a varios tamaños de página. Para lograr esto, los datos del reporte son transformados a formato PDF utilizando un servidor de reportes definido externamente. Otras mejoras de impresión han sido incorporadas en la versión 3.1 de Oracle Application Express, dentro de los Atributos de Impresión de la Región y los Queries de los Reportes. La ilustración de abajo muestra la arquitectura de impresión de Oracle Express:

Arquitectura impresión PDF en APEX

Cuando el usuario final de la aplicación hace clic en el enlace de impresión, la solicitud es enviada al motor de Apex (que es parte de la base de datos Oracle). Luego el motor de Apex genera los datos correspondientes del reporte en formato XML y la plantilla del mismo en formato XSL-FO o RTF. EL motor de reportes externo entonces transforma los datos y la plantilla a PDF, el cual es desplegado al usuario final utilizando el servlet de conversión que viene con BI Publisher 10.1.3.2. Toda esta complejidad de arquitectura es transparente para el usuario final y los desarrolladores. Los usuarios finales solo deben hacer clic en los enlaces de impresión, y los desarrolladores solo deben definir o rellenar declarativamente las regiones para poder utilizar la impresión en PDF.

Existen dos tipos de impresión en PDF, una estándar, la cual voy a tratar en este artículo, y la que se menciona en el párrafo anterior y que es conocida como Avanzada, y que por el momento voy a dejar de lado, debido a que BI Publisher es un producto licenciado de Oracle y que tiene un costo considerable, por lo que no todos podrán contar con esta como parte de sus aplicaciones.

Opciones de configuración

Su servidor de aplicaciones puede ser Oracle BI Publisher (como se mencionó arriba), OC4J con Apache FOP o cualquier otro motor de procesamiento XSL-FO estándar. Lógicamente, si se pudiera utilizar BI Publisher como su servidor de reportes, se tendrá un mayor nivel de funcionalidad, a continuación se presenta una breve descripción de ambas tipos de configuración para que se pueda comparar.

Opción Estándar (Básica)

La configuración estándar puede ser implementada con Apache FOP o cualquier otro motor de procesamiento XSL-FO estándar. A partir de Apex 3.0.1, se incluye dentro de este, una configuración de Apache FOP en conjunto con Oracle Containers para J2EE (10.1.3.2). Esto provee la habilidad de dar formato declarativo de las regiones de reportes y queries de reportes con control básico sobre los atributos de la página. Estos atributos incluyen orientación, tamaño, formato de cabeceras de columnas, encabezado de página y pie de página. Las ilustraciones de abajo muestran los reportes obtenidos con la configuración estándar:

Ejemplo estándar 1Ejemplo estándar 2Ejemplo estándar 3

Opción Avanzada

La configuración avanzada requiere una licencia válida de Oracle BI Publiser. Con esta configuración, usted cuenta con todas las capacidades de la opción estándar más la habilidad de definir y desarrollar trazados de reportes basados en RTF, utilizando para ello el complemento de Plantilla Word de BI Publisher. Esto provee fácil control gráfico sobre cada aspecto de su reporte. Se pueden agregar logotipos a sus páginas, controles de agrupado complejos y tener control total de la paginación. Fácilmente puede empotrar gráficos y crear reportes que luzcan exactamente como formularios estándar de cualquier organización. A continuación algunos ejemplos de reportes que ilustran la configuración avanzada:

Ejemplo avanzado 1Ejemplo avanzado 2Ejemplo avanzado 3

Instalando y configurando Apache FOP

Prerequisitos

Una configuración con soporte de Apache FOP en conjunción con Oracle Containers para J2ee (10.2.3.2) viene como parte de Apex 3.0.1 o superior. La instalación de Apache FOP viene incluida en la distribución de Apex bajo directorio_apex/utilities/fop/fop.war. (directorio_apex, es el directorio desde el que se instala Apex)

Por favor tome nota de que el soporte a Apache FOP en conjunto con OC4J (10.1.3.2) tiene soporte por parte de Oracle SOLO cuando se utilizan los archivos que se proporcionan. Las configuraciones alternas de Apache FOP no tienen ningún tipo de soporte.

Antes de empezar, usted va a necesitar OC4J instalado y ejecutándose. La siguiente versión de OC4J está verificada y trabaja con la solución FOP:

Paso 1: Instalando el archivo WAR

Coloque el archivo fop.war (localizado en directorio_apex/utilities/fop) en una localización accesible de su computadora local. Luego siga las siguientes instrucciones:

  1. Navegue hasta la Consola de OC4J del Enterprise Manager (http://localhost:8888/em) Los datos deben corresponder con sus datos de configuración.
  2. Selecciones la pestaña de Aplicaciones
  3. Haga clic en el botón “Desplegar” (Deploy)
  4. En la página de “Desplegar: Seleccionar archivo” utilice la opción “El archivo está presente en el host local. Cargar el archivo al servidor donde el Control de Servidor de Aplicaciones está ejecutándose” (o algo similar). Use el navegador de archivos para seleccionar el archivo fop.war y haga clic en el botón “Siguiente”.
  5. En la página “Desplegar: Atributos de Aplicación” defina el nombre de la aplicación como “fop” y limpie o desmarque la opción “Context root”, luego haga clic en el botón “Siguiente”.
  6. En “Desplegar: Definiciones de desplegado” haga clic en el botón “Desplegar”.

Paso 2: Configurar Apex para utilizar la impresión PDF y JSP

Una vez que tiene FOP instalado, accese los parámetros de Impresión de Reporte:

  1. Acceda a la página de Administración de Servicios
  2. Seleccione “Administrar Servicio”
  3. Seleccione “Definiciones de Instancia” , bajo Administrar Definiciones de Ambiente
  4. Haga clic en Impresión de Reportes, para enfocarse en los atributos de Impresión de Reportes únicamente

Ahora, especifique los siguientes atributos:

  • Oracle BI Publisher: Soporte Estándar
  • Protocolo Servidor de Impresión: HTTP o HTTPS (dependiendo de su configuración particular)
  • Dirección de host de Servidor de Impresión: el nombre de la computadora donde el contenedor java está ejecutándose – por ejemplo: micompu.micompañia.com
  • Puerto del Servidor de Impresión: el puerto en que el OC4J está escuchando – por ejemplo 8888
  • El script del Servidor de Impresión: /fop/apex_fop.jsp

Asegúrese de ingresar las definiciones del servidor de aplicaciones como se especifica, no use http:// delante de su nombre de computadora, no use dos puntos (:) en el puerto y no utilice “/” después del nombre del JSP, solo por delante: “/fop/apex_fop.jsp”.

Nota:Las imagenes utilizadas en este artículo son propiedad de la Corporación Oracle.

Cualquier consulta, comentario o sugerencia son bien recibidos. Espero verlos pronto por aca con un nuevo artículo.

4 Responses to “Impresión PDF en Oracle Apex”

  1. Jose says:

    Como le hago para entrar a la Consola de OC4J del Enterprise Manager, si ya levante el OC4J, solo que no carga la pagina. (localhost:8888). El numero de puerto siguse siendo 8888 y ya me asegure de apuntar a mi servidor.

  2. Eddie says:

    Para ingresar a la consola de administración, lo haces con la dirección:

    http://localhost:8888/adminoc4j

    Si no te funciona, o bien, cambiaste el puerto a otro diferente del 8888 a la hora de realizar la instalación, o el OC4J no se está ejecutando.

  3. Nauta says:

    Enhorabuena por este manual, me ha servido de gran ayuda para aclarar las ideas de la impresión de un PDF por APEX.

    Una vez realizados todos los pasos y dispuesto a imprimir un informe, me aparece el error siguiente en el explorador:

    500 Internal Server Error
    “OracleJSP: Se ha producido un error. Consulte al administrador del sistema o de la aplicación para obtener ayuda. Los programadores deberian considerar definir el parametro de inicializacion debug_mode en “true” para ver el mensaje de excepcion completo.”

    En la consola oc4j me aparece:

    “J2EE JSP-0008: No se ha podido distribuir la pagina JSP: Excepcion:oracle.jsp.providor.JspCompileException y la ruta del archivo _apex_fop.java”

    ¿Me pueden ayudar?

  4. Leandro says:

    Hola,

    Me gustaría saber cómo haces para compartir tu Apex a través de Internet, y si puedo implementar la versión 4.0 sobre la 2.1 sin sufrir pérdida de datos o algún otro inconveniente.

    Excelente tu sitio. Gracias!

Leave a Reply