Dev/Drafts/1.X/DesenvRelatoriosJasperReports

Desenvolvimento de Relatórios  JasperReports com o iReport para PHP

Índice

  1. Status
  2. Motivação
  3. O projeto PHPJasperXML
  4. Preparando o ambiente para os testes
    1. Pré-requisitos e downloads
    2. Estrutura dos novos arquivos
    3. Inserindos os novos menus
    4. Preparando o formulário de seleção
    5. Visualizando o resultado no relatório
  5. Exemplos de relatórios
  6. Links úteis
  7. 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:
    1. i-Educar 1.2.0;
    2. Script de criação do banco de dados com os menus alterados (ieducar\misc\database\portabilis.sql);
    3. 1 relatório .jrxml de exemplo (relatorios\jasperreports\portabilis_atestado_vaga.jrxml);
    4. 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

Créditos

Agradecimentos aos membros  Tiago Camargo,  Tiago Giusti e  Ricardo B. Dagostim pelo esforço colaborativo que fizeram para chegar a estes resultados.