es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Descargar PDF a través del contenido HTML que es un resultado de una Función (Oracle APEX)

Tienes una función empaquetada que devuelve datos de tipo CLOB basados en un parámetro. Estos datos de tipo CLOB se devuelven a través de una región dinámica de contenido de pl/sql. Todo el contenido CSS y etiquetas HTML junto con los datos están almacenados en la variable de retorno CLOB de la función que devuelve el informe deseado.

¿Hay alguna manera de utilizar esta función de manera que descargue automáticamente el informe en formato PDF de manera parametrizada, pero desde un informe clásico o interactivo?

EJEMPLO DE FUNCIÓN:
FUNCIÓN FNC_REPORT (P_ID NUMBER)
RETURN CLOB
IS
V_RET CLOB;
BEGIN
SELECT ‘<TABLE><TR><TD>’||TABLE_COLUMN||'</TD></TR></TABLE>’ INTO V_RET
FROM TABLE WHERE ID = P_ID;
RETURN V_RET;
END;

EJEMPLO DE CONTENIDO DINÁMICO DE PL/SQL:
HTP.P(FNC_REPORT(:PAGE_ITEM_ID));

LO QUE QUIERO HACER AHORA EN UN INFORME CLÁSICO O INTERACTIVO:
SELECT COLUMN1, COLUMN2, FNC_REPORT(ID) DOWNLOAD_PDF_REPORT /* DESCARGAR A TRAVÉS DE ESTA COLUMNA */
FROM TABLE;

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible descargar automáticamente el informe como PDF de la misma manera parametrizada, pero desde un informe Clásico o Interactivo. Puede lograr esto utilizando una biblioteca de terceros como APEX Office Print o PL/PDF. Estas bibliotecas pueden generar un documento PDF a partir de contenido HTML y pueden integrarse con Oracle APEX.

    Debería modificar su función para devolver los datos CLOB como contenido HTML con las etiquetas HTML apropiadas y el estilo CSS. Luego, puede usar la biblioteca de terceros para generar el documento PDF y configurar un enlace o botón de descarga en el informe Clásico o Interactivo.

    Por ejemplo, usando APEX Office Print, puede configurar un enlace de columna en su informe para llamar a un procedimiento PL/SQL que genere el documento PDF y lo descargue. El procedimiento llamaría a la función FNC_REPORT y pasaría el parámetro ID, y luego usaría APEX Office Print para generar el documento PDF y descargarlo.

    CREATE OR REPLACE PROCEDURE DOWNLOAD_REPORT(P_ID NUMBER) IS
      V_REPORT CLOB;
    BEGIN
      V_REPORT := FNC_REPORT(P_ID);
      APEX_OFFICE_PRINT.download(
        p_content     => V_REPORT,
        p_file_name   => 'report.pdf',
        p_print_format=> 'pdf'
      );
    END;
    

    Luego, en su informe Clásico o Interactivo, puede configurar un enlace de columna para llamar al procedimiento DOWNLOAD_REPORT y pasar el parámetro ID como una variable de enlace.

    SELECT COLUMN1, COLUMN2, 
      apex_item.link(
        p_text         => 'Descargar informe PDF', 
        p_attributes   => 'class="button"', 
        p_url          => 'javascript:DOWNLOAD_REPORT(#ID#)') DOWNLOAD_PDF_REPORT
    FROM TABLE;
    

    Esto generará un enlace de descarga para cada fila del informe, y al hacer clic en el enlace se generará y descargará un documento PDF basado en la función FNC_REPORT para el parámetro ID de esa fila.

Comments are closed.