Desenvolvimento de Relatórios JasperReports com o iReport para PHP
Índice
- Status
- Motivação
- O projeto PHPJasperXML
- Preparando o ambiente para os testes
- Exemplos de relatórios
- Links úteis
- Créditos
Status
Em andamento/rascunho.
Motivação
Dado a complexidade de manutenção dos relatórios existentes no i-Educar, resolvemos pesquisar uma alternativa para a criação de novos relatórios. A demanda da comunidade e alguns clientes por alterações nos modelos existentes e o desenvolvimento de novos modelos também foi fundamental para buscarmos esta alternativa. E como não poderia ser diferente, a solução que apresentamos é totalmente open-source. Iniciamos a pesquisa em dez. de 2009 e em jan. de 2010 começamos a obter bons resultados. Agora em abr. de 2010, após exaustivos testes e validações, trouxemos a proposta para a comunidade. Façamos bom uso'''
O projeto PHPJasperXML
JasperReports é um framework open-source em Java para o desenvolvimento de relatórios em vários formatos, entre eles: PDF, HTML, XLS, CSV e XML. O design de um relatório JasperReports, ou seja, o posicionamento dos textos, linhas, colunas do banco, imagens e outros objetos são estruturados em um arquivo fonte no formato XML. Após criado o relatório, é gerado um arquivo compilado .jasper, onde as expressões em Java que foram criadas no XML são processadas. O iReport entra como solução front-end para facilitar a criação e modelagem dos relatórios.
Mas e esta tal classe PHPJasperXML?
O PHPJasperXML é um projeto open-source em PHP criado e mantido pela SIMIT Software House. E como os próprios desenvolvedores dizem, PHPJasperXML atualmente é apenas uma classe e que faz todo o trabalho que precisamos. Quando um relatório é desenvolvido no iReport é gerado um arquivo fonte .jrxml e um compilado .jasper. De forma sucinta, o papel da classe PHPJasperXML é interpretar o conteúdo deste arquivo .jrxml e gerar uma saída no formato PDF utilizando a biblioteca FPDF. Como o projeto foi desenvolvimento originalmente para trabalhar com MySQL e codificação UTF-8, nosso desafio foi transcrever a classe para trabalhar com o Postgre SQL e dar suporte a caracteres acentuados ISO-8859-1.
Preparando o ambiente para os testes
Pré-requisitos e downloads
- Download da ferramenta de design para JasperReports o iReport:
- Download de um pacote do i-Educar contendo:
- i-Educar 1.2.0;
- Script de criação do banco de dados com os menus alterados (ieducar\misc\database\portabilis.sql);
- 1 relatório .jrxml de exemplo (relatorios\jasperreports\portabilis_atestado_vaga.jrxml);
- Pacote da classe PHPJasperXML 0.6 transcrita para o Postgre SQL e ISO-8859-1 (relatorios\phpjasperxml\class\PHPJasperXML.inc).
Observações e possíveis erros:
- Nesta documentação não abordamos os pré-requisitos para instalação do i-Educar.
- Em relação ao PHPJasperXML, as customizações foram realizadas na versão 0.6 e atualmente já está na 0.7.
- Esta solução já foi testada em ambientes Linux e Windows, tanto local quanto remoto. Os testes para esta documentação foram realizados com o Xampp 1.7.1, e se este foi instalado no diretório padrão c:\xampp não haverá problemas. Porém, caso na emissão do relatório ocorra algum erro relacionado ao brasão do relatório, faça o seguinte: (1) edite o arquivo .jrxml, (2) selecione o objeto de imagem do brasão que está localizado no cabeçalho do relatório e (3) altere a propriedade Image expression informando a localização correta do arquivo de imagem do brasão.
Estrutura dos novos arquivos
Quando o pacote do i-Educar supracitado for disponibilizado no servidor, a estrutura de arquivos deverá estar conforme mostrado na Figura 1:
Figura 1: estruturação dos novos arquivos no pacote do i-Educar:
http://img694.imageshack.us/img694/6404/portabilisieducararvore.png
Onde:
ieducar/intranet/relatorios: novo diretório criado para armazenar os arquivos necessários para o processamento dos relatórios; relatorios/jasperreports: diretório criado para armazenar os arquivos fontes de relatórios no formato .jrxml; relatorios/phpjasperxml/class: diretório criado para armazenar a classe PHPJasperXML que foi customizada.
Assim como o i-Educar possuí um arquivo de configuração para parametrizar a conexão com o banco de dados, o mesmo deve realizado no código da classe PHPJasperXML no arquivo relatorios\phpjasperxml\class\PHPJasperXML.inc. Veja abaixo um exemplo de configuração:
//Configuracao da Conexao com o Banco de Dados Postgre SQL $server="localhost"; // IP do servidor do banco de dados (localhost para banco de dados na mesma máquina) $db="portabilis"; // Nome do banco de dados $user="portabilis"; // Usuário do banco de dados $pass="123456"; // Senha do usuário do banco de dados $version="0.6"; // Não é necessário alterar $port="5432"; // Porta de conexão com o banco de dados (padrão é a 5432)
Inserindos os novos menus
Neste caso de testes, removemos do banco de dados todos os antigos relatórios do i-Educar e criamos submenus somente para os novos modelos, conforme pode ser visto na Figura 2:
Figura 2: submenus criados para os novos modelos de relatórios:
http://img528.imageshack.us/img528/3536/portabilisieducarsubmen.png
3. No diretório ieducar/intranet, criamos 2 arquivos que são responsáveis por mostrar o formulário de seleção para o usuário ao abrir o submenu, são eles:
portabilis_atestado_vaga.php portabilis_atestado_vaga_proc.php
Preparando o formulário de seleção
Estes dois arquivos acima geram o resultado que pode ser visto na Figura 3, quando o menu Documentos >> Atestado de Vaga é aberto:
Figura 3: formulário de seleção das informações para a emissão do relatório em PDF:
http://img62.imageshack.us/img62/1066/portabilisieducaremissa.png
Visualizando o resultado no relatório
Realizada a seleção, ao pressionar o botão <Salvar> será aberta uma nova aba no navegador com o relatório gerado.
Figura 4: relatório processado e aberto em uma nova guia do navegador:
http://img189.imageshack.us/img189/1134/portabilisieducarrelatop.png
Clique aqui para visualizar o relatório gerado em formato PDF
Exemplos de relatórios
Confira alguns modelos já desenvolvidos e que estão sendo utilizados:
Links úteis
- Thread no fórum de desenvolvimento para a discussão sobre esta proposta
- Thread no fórum de Suporte para esclarecer dúvidas e reportar bugs
- Página oficial do projeto PHPJasperXML (inglês)
Créditos
Agradecimentos aos membros Tiago Camargo, Tiago Giusti e Ricardo B. Dagostim pelo esforço colaborativo que fizeram para chegar a estes resultados.
