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:
1 2 3 4 5 6 7 8 9 10 11 12 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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:
1 2 3 4 |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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