šŸ“„ Exibindo PDFs e Imagens em um Modal no Oracle APEX

Marcelo BatalhaMarcelo Batalha
3 min read

šŸš€ IntroduĆ§Ć£o

Neste artigo, vou demonstrar como criar uma funcionalidade no Oracle APEX que permite o upload de arquivos PDF e imagens, armazenando-os temporariamente e exibindo-os em um modal sem a necessidade de download. O objetivo Ć© proporcionar uma experiĆŖncia mais fluida para o usuĆ”rio ao visualizar os arquivos diretamente na interface da aplicaĆ§Ć£o.

šŸ“Œ O exemplo utiliza a tabela temporĆ”ria APEX_APPLICATION_TEMP_FILES, mas a mesma abordagem pode ser aplicada a uma tabela jĆ” existente na aplicaĆ§Ć£o.

šŸ—ļø Estrutura da SoluĆ§Ć£o

A soluĆ§Ć£o Ć© composta por duas pĆ”ginas:

  1. šŸ“¤ PĆ”gina de Upload: Permite ao usuĆ”rio fazer upload de arquivos PDF e imagens, armazenando-os na tabela APEX_APPLICATION_TEMP_FILES.

  2. šŸ‘ļø PĆ”gina Modal de ExibiĆ§Ć£o: Exibe o arquivo selecionado em um iframe.

šŸ“¤ PĆ”gina de Upload

āœ… Criar um item de upload de arquivos configurado para aceitar PDFs e imagens.

āœ… Criar um botĆ£o ā€œSalvarā€ para dar submit na pĆ”gina e salver os arquivos na tabela.

āœ… Criar um RelatĆ³rio ClĆ”ssico que exibe os arquivos enviados na sessĆ£o atual.

select ID,
       FILENAME,
       MIME_TYPE
  from APEX_APPLICATION_TEMP_FILES

āœ… Criar uma coluna virtual com um link para abrir a pĆ”gina modal e exibir o arquivo. O link deve passar o ID do arquivo para um item P32_FILE_ID na pĆ”gina modal.

āœ… Na propriedade Link Text da coluna virtual, inserir o seguinte cĆ³digo para exibir um Ć­cone de visualizaĆ§Ć£o ao invĆ©s de um texto:

<i class="fa fa-search-plus fa-lg text-danger"></i>

šŸ“ø PĆ”gina de Upload:

šŸ‘ļø PĆ”gina Modal de ExibiĆ§Ć£o

1ļøāƒ£ Criar um item hidden P32_FILE_ID para receber o ID do arquivo enviado pelo link. O item Ć© ā€œP32_FILE_IDā€ porque estĆ” na pĆ”gina 32. Quando vocĆŖ criar sua pĆ”gina, substituir pelo nome do seu campo.

2ļøāƒ£ Criar uma regiĆ£o Static Content com o seguinte cĆ³digo:

<iframe id="pdfViewer" src="" width="100%" height="100%" style="min-height: 700px; border: none;"></iframe>

3ļøāƒ£ Criar um processo Before Header para buscar e exibir o arquivo:

DECLARE
    l_blob  BLOB;
    l_mime  VARCHAR2(100);
BEGIN
    SELECT blob_content, mime_type
    INTO l_blob, l_mime
    FROM apex_application_temp_files
    WHERE id = :P32_FILE_ID;

    owa_util.mime_header(l_mime, FALSE);
    htp.p('Content-Disposition: inline; filename="documento.pdf"'); 
    htp.p('Content-Length: ' || dbms_lob.getlength(l_blob));
    owa_util.http_header_close;

    wpg_docload.download_file(l_blob);
    APEX_APPLICATION.STOP_APEX_ENGINE;
EXCEPTION
    WHEN no_data_found THEN
        htp.p('Erro: Arquivo nĆ£o encontrado.');
END;

4ļøāƒ£ Criar uma Dynamic Action no evento Page Load com aĆ§Ć£o Executar JavaScript Code, utilizando o seguinte cĆ³digo para carregar o arquivo no iframe:

var fileId = $v("P32_FILE_ID"); // ObtƩm o ID do PDF
var pdfUrl = "f?p=&APP_ID.:100:&SESSION.::NO::P32_FILE_ID:" + fileId;
document.getElementById("pdfViewer").setAttribute("src", pdfUrl);

šŸ“ø Dynamic Action

šŸ“ø Modal com o PDF

Se quiser aumentar ou diminuir o tamanho da janela Modal, pode alterar as propriedades da pƔgina:

šŸŽÆ ConclusĆ£o

Com essa implementaĆ§Ć£o, conseguimos exibir arquivos PDF e imagens em um modal sem necessidade de download, proporcionando uma experiĆŖncia mais integrada e eficiente para os usuĆ”rios da aplicaĆ§Ć£o Oracle APEX. Essa abordagem pode ser Ćŗtil para diversas aplicaƧƵes que necessitam de visualizaĆ§Ć£o de documentos diretamente na interface sem depender de downloads ou plugins externos.

šŸ’” Dica: Se quiser armazenar os arquivos em uma tabela prĆ³pria, basta adaptar a consulta no processo Before Header.

0
Subscribe to my newsletter

Read articles from Marcelo Batalha directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Marcelo Batalha
Marcelo Batalha