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:

imp_pdf1

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

Share This