Lançado Adianti Framework 8.0!
Clique aqui para saber mais
problema em exibir pdf com TElement Pessoal está acontecendo uma coisa estranha aqui. Meu ambiente de desenvolvimento é o XAMPP no Windows. Ontem passei o sistema para um Ubuntu 22.04 com Mysql e Apache. Funciona tudo bem o sistema. Porem quando clico em um action do datagrid para abrir um PDF em um TWindow ele não exibe o PDF quando estou no computador, mas exibe o PDF quando uso o celular. No ambiente de desenvolvimento, ...
CD
problema em exibir pdf com TElement  
Pessoal está acontecendo uma coisa estranha aqui.
Meu ambiente de desenvolvimento é o XAMPP no Windows.

Ontem passei o sistema para um Ubuntu 22.04 com Mysql e Apache.
Funciona tudo bem o sistema.
Porem quando clico em um action do datagrid para abrir um PDF em um TWindow ele não exibe o PDF quando estou no computador, mas exibe o PDF quando uso o celular. No ambiente de desenvolvimento, não apresenta esse problema.

Método que estou usando:

  1. <?php
  2. public function onOpenPdf($param)
  3.     {
  4.         $idsolicitacao $param['idsolicitacao'];
  5.     try
  6.         {
  7.             if (isset($param['key']))
  8.             {
  9.                 $key $param['key'];
  10.                 TTransaction::open('intranet');
  11.                 $solicitacao = new Solicitacao($key);
  12.                 if ($solicitacao->oficio// Agora oficio contém o caminho do arquivo
  13.                 {
  14.                     $filePath $solicitacao->oficio// Constrói o caminho completo
  15.                     if (file_exists($filePath))
  16.                     {
  17.                         $baseUrl = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' "https" "http") . "://{$_SERVER['HTTP_HOST']}/";
  18.                         // Usa Google Docs Viewer (recomendado)
  19.                         $window TWindow::create('Visualizar Ofício'0.80.8);
  20.                         $object = new TElement('object');
  21.                         $object->data $baseUrl $filePath// Usa realpath para obter o caminho absoluto
  22.                         $object->type 'application/pdf';
  23.                         $object->style "width: 100%; height:calc(100% - 10px)";
  24.                         $window->add($object);
  25.                         //$object->add('O navegador não suporta a exibição deste conteúdo, <a style="color:#007bff;" target=_newwindow href="'.$object->data.'"> clique aqui para baixar</a>...');
  26.                         $window->show();
  27.                     }
  28.                     else
  29.                     {
  30.                         new TMessage('error''Arquivo não encontrado: ' $filePath);
  31.                     }
  32.                 }
  33.                 else
  34.                 {
  35.                     new TMessage('info''Nenhum ofício anexado.');
  36.                 }
  37.                 TTransaction::close();
  38.             }
  39.         }
  40.         catch (Exception $e)
  41.         {
  42.             new TMessage('error'$e->getMessage());
  43.             TTransaction::rollback();
  44.         }
  45.     }
  46. ?>


Porem se eu uso um var_dump para pegar o valor que está em $object->data e copio o valor e colo no navegador ele abre normalmente o pdf.
Ou seja, permissão não é o problema.

IMAGEM Computador: https://i.postimg.cc/rmmN943f/erro-intranet.png
IMAGEM Celular: https://i.postimg.cc/W3SF5pxS/64-BC31-E0-EA01-48-B5-BC22-6-CD0-F840-AA30.jpg
Editado 07/02/2025 (há 1 mês) - Clique para ver alterações

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


CD

Ah, não é meu código que está errado.
Na tela de programas do template do adianti ao exportar a lista de programas para pdf também fica em branco o twindow

VER AQUI: https://i.postimg.cc/Kv2Jpvyw/intranet-PDF1.png
PD

Testei aqui e funcionou normalmente:
https://framework.adianti.me/template/index.php?class=SystemProgramList
PD

No $object->data, vc não precisa colocar o domínio, nem protocolo quando o arquivo é dentro do sistema.

Ex: $object->data = 'app/output/document.pdf';