š Exibindo PDFs e Imagens em um Modal no Oracle APEX

š 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:
š¤ PĆ”gina de Upload: Permite ao usuĆ”rio fazer upload de arquivos PDF e imagens, armazenando-os na tabela
APEX_APPLICATION_TEMP_FILES
.šļø 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
.
Subscribe to my newsletter
Read articles from Marcelo Batalha directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
