El siguiente procedimiento muestra como mostrar en una página de aplicación Apex, un archivo PDF almacenado en una tabla.
Para esto vamos a suponer que tenemos una tabla «MIS_PDFS» como la siguiente:
CREATE TABLE MIS_PDFS ( PDF_ID NUMBER NOT NULL , PDF_NOMBRE VARCHAR2(40) NOT NULL , PDF_DESCRIPCION VARCHAR2(200) NOT NULL , PDF_BLOB BLOB , CONSTRAINT MIS_PDFS_PK PRIMARY KEY ( PDF_ID ) ENABLE );
Además, contamos con un procedimiento «IMPRIME_PDF», que obtiene el PDF almacenado en la tabla:
create or replace PROCEDURE IMPRIME_PDF (P_ID IN NUMBER) AS l_mime varchar2(255); l_length number; l_file_name varchar2(200); l_blob blob; BEGIN select '', pdf_blob, DBMS_LOB.getlength(pdf_blob) into l_mime, l_blob, l_length from mis_pdfs where PDF_ID = p_id; owa_util.mime_header( nvl(l_mime,'application/pdf'), FALSE ); htp.p('Content-length: ' || l_length); owa_util.http_header_close; -- descargar el reporte pdf wpg_docload.download_file(l_blob); END;
Para mostrar el PDF en una página, lo primero que vamos a hacer es crear una página de tipo reporte que obtenga los datos de los diferentes archivos, para ello vamos a utilizar el siguiente query:
select pdf_id Id, pdf_nombre Nombre, pdf_descripcion Descripcion from mis_pdfs;
En este caso, el mostrado del archivo PDF lo voy a hacer en una nueva página, pero se puede hacer también en una región dentro de la misma página.
Por lo anterior, el paso siguiente es crear una página en blanco, a la que le vamos a agregar una región de tipo «Contenido Dinámico PL/SQL» en la que vamos a incluir el siguiente código:
declare v varchar2(4000); begin v := '''<iframe src="http://su_servidor:su_puerto/apex/ESQUEMA.IMPRIME_PDF?pdf_id='||:P999_PDF_ID||'" height="450" width="800">' || ' <ilayer src="http://su_servidor:su_puerto/apex/ESQUEMA.IMPRIME_PDF?pdf_id='||:P999_PDF_ID||'">' || '<p>Haga click aquÃ<a href="http://su_servidor:su_puerto/apex/ESQUEMA.IMPRIME_PDF?pdf_id='||:P999_FID_ID||'">' || '</a></p></ilayer>' || '</iframe>'''; htp.print(v); end;
Vamos a crear en esta última página un campo oculto con el nombre P999_PDF_ID (donde 999 es el número de página que se acaba de crear).
Ahora vamos a regresar a la página del reporte creado más arriba y vamos a editar las propiedades de la columna Id, específicamente la sección de «Enlace de columna», donde vamos modificar los siguientes campos:
Texto de Enlace: Agregamos la imagen a utilizar
Destino: Página en esta aplicación
Página: 999
Elemento 1 Nombre: P999_PDF_ID
Elemento 1 Valor: #ID#
Aplicamos los cambios y listo
Requiero hacer un modulo pero en la versión 3.5
Para 3.5 se puede usar?
Si mi amigo Oscar, esto lo puede hacer en 3.5
Quiero hacer justamente esto, pero no logro conseguirlo.
Ni desde el sitio apex.oracle.com ni localmente con la versión 4.
Con lo indicado en el post me da error, y no logro entender muy bien por qué.
He tratado de seguir la lógica de la aplicación de ejemplo y el código que usa para mostrar las imagenes de los productos, pero con PDF parece no funcionar.
Alguna idea?
Gracias
Se puede hacer esto en apex 5? El procedimiento se manda llamar desde la barra de direccion? Saludos
Claro que se puede hacer en APEX 5, se podría llamar desde la barra de dirección, pero para eso necesitas incluirlo en la función wwv_flow_epg_include_mod_local del esquema de APEX, necesitas también darle permisos de ejecución y debe tener un sinónimo público.