Mostrar archivo PDF usando PL/SQL Dynamic Content

Mostrar archivo PDF usando PL/SQL Dynamic Content

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: