Gerador de relatórios PHP com iReport e PHPJasperXML
1. Usando o iReport como gerador de relatórios para PHP
Veremos hoje uma solução para utilizar um gerador de relatórios para a linguagem
PHP. Consiste no uso do trabalho em conjunto de relatórios JasperReports e o
pacote PHPJasperXML.
O que me motivou a buscar esta solução foi a procura por um gerador de relatórios
para PHP, na grande maioria das vezes com insucesso.
A linguagem PHP é extremamente flexível e muitos desenvolvedores que a
utilizam, quando necessitam desenvolver relatórios, fazem seu próprio código,
desenvolvendo suas próprias quebras de linha etc. Só que o uso de softwares
geradores de relatórios, os chamados reportsgenerators, trazem inúmeras
vantagens ao desenvolvedor. Além de ser mais profissional o uso destes
softwares, pois poupa tempo de desenvolvimento por serem muito mais fáceis de
confeccionar do que se elaborar um código para esta finalidade, é também útil
quando se necessita de suporte, pois diversos usuários do mundo inteiro utilizam
desses softwares.
iReport
O iReport é um desenhador de layouts para JasperReports. É muito utilizado por
desenvolvedores da linguagem Java, sendo uma alternativa livre ao excelente
Crystal Reports. Neste link o download pode ser feito, além de conter tutoriais. É
necessário ter a suíte JDK já instalada para fazer a instalação do iReport. Não é o
foco do artigo a explicação de como utilizar o iReport.
Além de ser muito intuitivo e de fácil uso, é útil em praticamente todas as
necessidades na confecção de um relatório. Traz diversas opções como uso de
código de barras, sub-relatórios e etc. O iReport permite que os relatórios sejam
gerados em XML, PDF, HTML, DOCX, ODT, dentre outros formatos.
Ao inserir as informações de conexão com o banco de dados (o iReport traz
diversas opções como JDBC, Conexão com Hibernate, XML e etc), processo que
pode ser visto aqui, é gerado um arquivo de extensão jrxml. Ao ser compilado, um
arquivo de extensão jasper também é gerado (arquivo executável do relatório). Faz
analogia à linguagem Java, que tem o código residente nos arquivos de extensão
JAVA (no caso do iReport, extensão jrxml). Depois de compilados são gerados
arquivos de extensão CLASS (no iReport, jasper).
PHPJasperXML
O PHPJasperXML possibilita a leitura de arquivos jrxml, feitos utilizando o iReport,
para transformá-los em relatórios no formato PDF, com o auxílio da classe FPDF.
É escrito em PHP e muito fácil de ser configurado. É também uma solução
alternativa ao PHP/Java Bridge.
Na página do projeto é possível fazer o download do código. Além de conter
tutoriais.
Para seu uso é necessário basicamente editar o arquivo setting.php, que contém
as variáveis indicativas da conexão com banco de dados.
O arquivo PHPJasperXML.inc contém a classe PHPJasperXML, que faz todo o
"trabalho pesado" de conectar com o banco de dados (vem configurada para
2. MySQL), ler o conteúdo arquivo jrxml e junto com a classe FPDF, gerar o relatório
em PDF.
Exemplo de utilização
Irei exemplificar o uso do iReport com a classe PHPJasperXML.
Para nosso exemplo é necessário ter o SGBD MySQL instalado. Crie o banco de
dados com os seguintes comandos:
CREATEDATABASEProjetoPHP;
USEProjetoPHP;
CREATETABLEusuarios (
id INT(11) NOTNULLAUTO_INCREMENT, nomeVARCHAR(50),
PRIMARYKEY (id)
);
INSERTINTOusuarios (nome) VALUES ('PHP'), ('MySQL'),
('JasperReports'), ('PHPJasperXML');
Após criar nosso banco de dados, chamado ProjetoPHP, é o momento de elaborar
o relatório. Para nosso exemplo, o relatório será chamado de phpjasperxml.jrxml. A
conexão com o banco de dados que criamos deverá ser feita no iReport (esse
processo é exemplificado em um link no texto introdutório do iReport, acima). Após
criada a conexão, vamos inserir a seguinte query no Report Query do relatório
(para ver como inserir queries no iReport, confiraaqui):
SELECT
* FROMusuarios;
Esta query nos retornará dois fields (id e nome) que deverão estar no relatório.
Finalizando nosso relatório, deverá ser inserido um parâmetro chamado descricao.
Para saber como adicionar parâmetros em um relatório com o iReport,
confira aqui.
Depois de feito o download do PHPJasperXML, basta extrair a pasta class e o
arquivo setting.php para a pasta de seu projeto.
A figura abaixo mostra a elaboração deste relatório no iReport:
3. Figura 1: Elaboração do relatório no iReport.
Para nosso exemplo, o projeto será chamado relatorioPHP. No arquivo setting.php,
você deve informar o caminho para seu banco de dados, como a seguir:
<?php
$server="localhost";
$db="phpjasperxml";
$user="root";
$pass="phpmaster";
$version="0.6d";
?>
A variável $version não precisa ser editada. Você pode criar um arquivo que irá
instanciar a classe PHPJasperXML. Vamos chamar este arquivo de exemplo.php e
seu conteúdo é descrito abaixo:
<?php
include_once('class/fpdf/FPDF.php');
include_once("class/PHPJasperXML.inc");
include_once ('setting.php');
$xml = simplexml_load_file("phpjasperxml.jrxml"); //informe onde está
seu arquivo jrxml
$PHPJasperXML = newPHPJasperXML();
$PHPJasperXML->debugsql=false;
4. $descricao=$_GET["descricao"]; //recebendo o parâmetro descrição
$PHPJasperXML->arrayParameter=array("descricao"=>$descricao); //passa
o parâmetro cadastrado no iReport
$PHPJasperXML->xml_dismantle($xml);
$PHPJasperXML->connect($server,$user,$pass,$db);
$PHPJasperXML->transferDBtoArray($server,$user,$pass,$db);
$PHPJasperXML->outpage("I");
?>
Agora vamos testar nossa aplicação. Basta ir ao browser e
digitarhttp://localhost/relatorioPHP/exemplo.php?descricao=HelloWord
Se tudo ocorrer como o esperado, será exibido o relatório em PDF, de acordo com
a figura 2:
Figura 2: Relatório gerado
O parâmetro é passado pelo método GET e tratado no nosso arquivo
exemplo.php. Como este parâmetro já é esperado pelo relatório, definido em sua
criação, é repassado pela classe PHPJasperXML ao nosso relatório.
Uma observação é que no momento da elaboração do iReport, não se deve
colocar nenhum objeto (Fields, parâmetros, Labels e etc) nas bandas Title e
Column Header do relatório. Isso porque a classe PHPJasperXML não trata essas
bandas e os objetos contidos nela simplesmente não são exibidos no relatório.
Essa observação só vale caso você queira utilizar o iReport com a classe
PHPJasperXML, que é o nosso caso. Nos relatórios gerados pelo iReport (e não
5. pela classe PHPJapserXML), os elementos contidos nestas bandas são exibidos
normalmente.
Como foi dito, PHPJasperXML vem configurado para um conexão com MySQL.
Para o que precisei foi necessário adaptar esta classe ao PostgreSQL. Meu amigo
Ronaldo Meneguite disponibilizou em seu site, em artigo publicado também por
ele, a classe modificada, que pode ser vista aqui.
*
Gostaria de agradecer à colega de trabalho, Jéssica Boalente Carvalho, pela ajuda
na procura desta solução e na utilização da mesma. Ao amigo Ronaldo Louro
Meneguite, por postar em seu site a classe PHPJasperXML que modifiquei aos
moldes do PostgreSQL e pela troca de experiências sobre o assunto.
Fonte.:
http://imasters.com.br/artigo/15736/php/usando_o_ireport_como_gerador_de_relatorios_pa
ra_php/