Cachina’s Programming Blog


Usando o iReport como gerador de relatórios para PHP

Enviado em PHP por Mayron Cachina em janeiro 29, 2010
Tags: , , ,

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 reports generators, 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 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:

CREATE DATABASE ProjetoPHP;

USE ProjetoPHP;

CREATE TABLE usuarios (

id INT(11) NOT NULL AUTO_INCREMENT, nome VARCHAR(50),

PRIMARY KEY (id)

);

INSERT INTO usuarios (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, confira aqui):

SELECT
* FROM usuarios;

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:

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 = new PHPJasperXML();

$PHPJasperXML->debugsql=false;

$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 digitar http://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 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.

Referencia: IMasters

About these ads

15 Respostas para 'Usando o iReport como gerador de relatórios para PHP'

Subscribe to comments with RSS ou TrackBack para 'Usando o iReport como gerador de relatórios para PHP'.

  1. aresias disse,

    Muito bom, parabéns cara. Era disso que eu estava precisando.


    • pois é , ralava para criar relatórios bacanas em pdf, agora é uma mão na roda!

  2. thedude disse,

    Olá! é possivel imprimir os relatorios em html mesmo ao inves de pdf?


    • Pelo que eu vi na classse não da pra fazer isso, ela só da suporte a geração de PDF.
      A classe nada mais nada menos é um bridget para uso de xml em java…

  3. Emerson disse,

    Show de bola, era isso mesmo que eu precisava.
    Nem me importo da gambiarra hahahahaha!!!!
    Brincadeira a parte, ficou show.


    • heheh, na realidade não eh gambiarra, é apenas uma bridget :)

  4. ovidio disse,

    Seria possivel integra isso em web2py ou django?

  5. Hélder disse,

    è Possivel adaptar ao Firebird 2.5?

  6. Suelen disse,

    Ótimo post!!!
    Maravilha esta ferramenta, meu sofrimento enfim chegou ao fim :D

    Existe possibilidade de integração com o Netbeans?

    Abração, valew!

  7. Alex disse,

    Cara, valeu, seu post me ajudou muito.

    Deus te abençoe!

  8. Sara Cibelle disse,

    Tudo o que eu precisava…


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

%d blogueiros gostam disto: