Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Integrar o JasperPHP (Sem uso do JAVA) dentro do Adianti Boa noite a todos! Venho efetuando testes no uso do JasperPHP (Sem JAVA) da QuilhaSoft ( https://github.com/QuilhaSoft/JasperPHP ) dentro do Adianti. Coincidentemente as rotinas de acesso ao banco de dados, são idênticas ao do Adianti, passando a usar o do mesmo. Na apresentação do PDF gerado foi onde começou os problemas, a forma original da rotina apresento no código abaixo: ...
DA
Integrar o JasperPHP (Sem uso do JAVA) dentro do Adianti  
Boa noite a todos!

Venho efetuando testes no uso do JasperPHP (Sem JAVA) da QuilhaSoft ( https://github.com/QuilhaSoft/JasperPHP ) dentro do Adianti.

Coincidentemente as rotinas de acesso ao banco de dados, são idênticas ao do Adianti, passando a usar o do mesmo.

Na apresentação do PDF gerado foi onde começou os problemas, a forma original da rotina apresento no código abaixo:
  1. <?php
  2. public function outpage($type 'pdf') {
  3.         $this->report->generate();
  4.         $this->report->out();
  5.         switch ($this->type) {
  6.             case 'pdf':
  7.                 $pdf JasperPHP\Instructions::get();
  8.                 $pdf->Output('report.pdf'"I");
  9.                 break;
  10.             case 'xls':
  11.                 header('Content-Type: application/vnd.ms-excel');
  12.                 header('Content-Disposition: attachment;filename="01simple.xls"');
  13.                 header('Cache-Control: max-age=0');
  14.                 // If you're serving to IE 9, then the following may be needed
  15.                 header('Cache-Control: max-age=1');
  16.                 // If you're serving to IE over SSL, then the following may be needed
  17.                 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  18.                 header('Last-Modified: ' gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  19.                 header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  20.                 header('Pragma: public'); // HTTP/1.0
  21.                 $objWriter PHPExcel_IOFactory::createWriter(JasperPHP\Instructions::$objOutPut'Excel5');
  22.                 $objWriter->save('php://output');
  23.                 break;
  24.         }
  25.     }
  26. ?>

Essa opção "I" não consegui fazer com que funcionasse quando rodado fora do Adianti, aparece o erro que está na imagem ERRO01 do arquivo em anexo. O JasperPHP usa o TCPDF para gerar o PDF, descobri que tem o parâmetro "F" (File) e modifiquei a rotina e passou a gerar os relatórios, tem um EXEMPLO no arquivo em anexo, conforme a mudança efetuada abaixo:
  1. <?php
  2.  public function outpage($type 'pdf') {
  3.         $this->report->generate();
  4.         $this->report->out();
  5.         switch ($this->type) {
  6.             case 'pdf':
  7.                 $pdf JasperPHP\Instructions::get();
  8.                 $repname "report".uniqid().".pdf";
  9.                 $pdf->Output(getcwd()."/app/output/{$repname}""F");
  10.                 $window TWindow::create('',0.8,0.8);
  11.                     
  12.                 $embed = new TElement('embed');
  13.                 $embed->src "app/output/{$repname}";
  14.                 $embed->style 'width:100%;height:95%';
  15.                                     
  16.                 $window->add($embed);
  17.                                    
  18.                 $window->show(); 
  19.                
  20.                 break;
  21.             case 'xls':
  22.                 header('Content-Type: application/vnd.ms-excel');
  23.                 header('Content-Disposition: attachment;filename="01simple.xls"');
  24.                 header('Cache-Control: max-age=0');
  25.                 // If you're serving to IE 9, then the following may be needed
  26.                 header('Cache-Control: max-age=1');
  27.                 // If you're serving to IE over SSL, then the following may be needed
  28.                 header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
  29.                 header('Last-Modified: ' gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
  30.                 header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
  31.                 header('Pragma: public'); // HTTP/1.0
  32.                 $objWriter PHPExcel_IOFactory::createWriter(JasperPHP\Instructions::$objOutPut'Excel5');
  33.                 $objWriter->save('php://output');
  34.                 break;
  35.         }
  36.     }
  37.  
  38. ?>


Tudo isso pesquisando dentro das rotinas do Adianti como apresentava o PDF, e considerando meu conhecimento em PHP ainda caminhando e mais ainda com relação a desenvolver para web. Essa alteração funciona perfeitamente em ambiente Desktop, testando no Mobile apresentou o erro demonstrado no arquivo em anexo ERRO02. Fiz um teste isolando o TCPDF e acessando via Mobile uma relatorio gerado por ele e carregou normal no Mobile.

Alguém já chegou a testar essa versão do JasperPHP? Gostaria de um apoio para tentar solucionar essa visualização para que possa funcionar nos diversos dispositivos. Não sei se é algum conflito com o DOMPdf do Adianti, ou inexperiencia na solução que encontrei e funcionou para o Desktop e não no Mobile.

Espero uma luz no fim do túnel para ver se soluciono meu problema e fico a disposição para quaisquer dúvidas!

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (6)


NR

Pela mensagem, o navegador do mobile tenta carregar o documento usando algum plugin(flash provavelmente, que foi descontinuado no final de 2020).

Faça um teste usando a tag "object" ao invés de "embed":
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object
DA

Boa tarde, Nataniel

Foi na mosca, porém usando essa configuração abaixo, aparecia para abrir o PDF e não executava o download.

  1. <?php
  2.                 $pdf JasperPHP\Instructions::get();
  3.                 $repname "report".uniqid().".pdf";
  4.                 $pdf->Output(getcwd()."/app/output/{$repname}""F");
  5.                 
  6.                 $window TWindow::create('',0.8,0.8);
  7.                     
  8.                 $object = new TElement('object');
  9.                 $object->type "application/pdf";
  10.                 $object->data "app/output/{$repname}";
  11.                 $object->style 'width:100%;height:95%';
  12.                 
  13.                 $window->add($object);
  14.                               
  15.                 $window->show();
  16. ?>


Vi o exemplo no tutor de "Página com PDF Embutido" e troquei o "object" por "iframe" e funcionou o abrir, baixando e apresentando o PDF.

  1. <?php                              
  2.                 $pdf JasperPHP\Instructions::get();
  3.         $repname "report".uniqid().".pdf";
  4.         $pdf->Output(getcwd()."/app/output/{$repname}""F");
  5.                         
  6.         $window TWindow::create('',0.8,0.8);
  7.                            
  8.         $object = new TElement('iframe');
  9.         $object->src   "app/output/{$repname}";
  10.         $object->type  'application/pdf';
  11.         $object->style "width: 100%; height:600px";
  12.         $window->add($object);
  13.                                       
  14.                 $window->show();               
  15. ?>

Agora dá para continuar testando o componente, é bem leve, já que não precisa do JAVA para executar, você edita no iReport, salva o jrxml e roda dentro do Adianti.

Mais uma vez grato pela dica e pela rapidez na resposta.
LG

Olá, você que utiliza o jasperPHP diretamente dentro do andianti teve algum problema de desempenho? pois não sei porque ao rodar o JasperPHP por fora do adianti apenas utilizando o autoload do vendor ele roda instantaneamente, porem ao executar internamente no adianti ele fica carregando e demora muito até gerar o relatório.
DA

Olá Leandro, fiz algumas adaptações para rodar dentro do Adianti, vi que as configurações, de conexão e transações do JasperPHP eram idênticas ao do Adianti, então fiz com que usasse a dele.

Tive um problema para gerar no Adianti da forma que vem na rotina do JasperPHP, com o parametro "I" não aparecia o PDF normal só codificado.

Vem assim no JasperPHP

  1. <?php
  2. public function outpage($type 'pdf') {
  3.         $this->report->generate();
  4.         $this->report->out();
  5.         switch ($this->type) {
  6.             case 'pdf':
  7.                 $pdf JasperPHP\Instructions::get();
  8.                 $pdf->Output('report.pdf'"I");
  9.                 break;
  10. ?>


Modifiquei para usar no Adianti

  1. <?php
  2.  public function outpage($type 'pdf') {
  3.         $this->report->generate();
  4.         $this->report->out();
  5.         switch ($this->type) {
  6.             case 'pdf':
  7.                 $pdf JasperPHP\Instructions::get();
  8.                 $repname "report".uniqid().".pdf";
  9.                 $pdf->Output(getcwd()."/app/output/{$repname}""F");
  10.                 
  11.                 $window TWindow::create('',0.8,0.8);
  12.                     
  13.                 $object = new TElement('iframe');
  14.                 $object->src   "app/output/{$repname}";
  15.                 $object->type  'application/pdf';
  16.                 $object->style "width: 100%; height:600px";
  17.                 $window->add($object);
  18.                               
  19.                 $window->show();
  20.                
  21.                 break;
  22. ?>


Demora um pouco entre a gravação do PDF e mostrar ele na tela, vai muito também da conexão da internet, segue um link para verificar como está funcionando o JasperPHP, tanto no PC quanto no mobile, dentro do meu projeto. Não sei se o desempenho está igual ao seu.

https://www.retalhotecnologico.com.br/advday
usuario: visitante password: 12345.

Como não tenho muita expertise em PHP, foi uma solução que encontrei.
PG

Bom dia, vc que usa o JasperPHP,
com ele consigo salvar em outros formatos tipo
csv,html, etc..
DA

Boa Tarde, Paulo

Como estou abrindo por um visualizador de PDF, nele só consigo salvar em PDF. Não cheguei a ter a necessidade de gravar em outros formatos. Agora ele tem um tratamento para gerar XLS através do PHPOffice, mas nunca fiz um teste desta funcionalidade. Dentro do JasperPHP que estou utilizando só tem esses dois formatos implementados, PDF e XLS.