Muchas veces tenemos la necesidad de mostrar los archivos PDF almacenados en columnas blob o bfile. En este post veremos de manera rápida como mostrar el archivo almacenado usando pl/sql dynamic content.
En este caso tenemos una pantalla en donde el usuario al momento de dar click en el interactive report mostrará en una pagina modal el pdf almacenado.
Crear una pagina tipo: Modal, luego crear una Región de tipo: PL/SQL Dynamic Content y en el código de PL/SQL ingresar lo siguiente, cambiar los datos en la parte del select para cada caso.
DECLARE
v_blob BLOB := empty_blob(); --Blob to store the file content
l_step number := 22500; --Steps in bytes to print the file content
BEGIN
begin
Select file_blob
into v_blob
from EBA_PROJECTS_FILES
where id = :P7_ID;
exception
when no_data_found then
v_blob := null;
end;
if v_blob is not null then
DBMS_LOB.OPEN(v_blob, DBMS_LOB.LOB_READONLY);
htp.p( '<embed src="data:application/pdf;base64,' );
for i in 0 .. trunc((dbms_lob.getlength(v_blob) - 1 )/l_step) loop
htp.p( utl_raw.cast_to_varchar2(utl_encode.base64_encode(dbms_lob.substr(v_blob, l_step, i * l_step + 1))));
end loop;
htp.p('" height="1000" width="1000" >');
DBMS_LOB.CLOSE(v_blob);
else
null;
end if;
EXCEPTION WHEN OTHERS THEN
htp.p('There was an error displaying the PDF file, Sorry');
END;
El resultado es el siguiente: