Usando relatórios jasper com PHP

Introdução

A criação de relatórios é uma tarefa muito comum na área de desenvolvimento de sistemas, produzir modelos de relatórios sempre foi uma tarefa muito árdua até o surgimento da biblioteca jasperreports e sua ferramenta de design, o iReport. Através destas ferramentas é possível criar modelos de relatórios de uma forma muito simples e prática.

O funcionamento básico trata-se da criação de um arquivo com extensão jrxml (Jasper Report XML), o qual pode ser facilmente desenhado através da ferramenta gráfica iReport, com o modelo de relatório em mãos, o arquivo jrxml, a biblioteca do jasperreport compila o arquivo para um formato com extensão jasper, este arquivo é o “byte-code” do modelo de relatório a ser interpretado pelo jasperreport. Em seguida a mesma biblioteca irá gerar o arquivo de relatório no formato desejado.

O jasperreport é capaz de gerar relatórios em vários formatos, como por exemplo: xml, odt, pdf, rtf, entre outros. Para cada um desses formatos o jasperreport vai precisar de uma biblioteca capaz de gerar conteúdo no específico formato (sendo que alguns formatos não é necessário nenhuma extensão extra). Por exemplo, para gerar arquivos pdf o jasperreport necessita da biblioteca itext.
São necessárias algumas bibliotecas para qualquer geração de relatório com o jasperreport, além das bibliotecas específicas para cada formato, são elas:

  • apache-commons-logging
  • apache-commons-beanutils
  • apache-commons-collections
  • apache-commons-digest

Se o modelo de relatório que está implementando fizer uma consulta ao banco de dados, a biblioteca de conexão a este banco também deve ser incluída.

Configurando o ambiente do servidor

As instruções a seguir consideram que o ambiente já tenha o apache, php e o jdk instalados na máquina, foram testados utilizando o apache2, php5 e o sun-java6. A configuração do servidor em ambientes linux pode ser feita de três maneiras diferentes dependendo da distribuição utilizada.

  • Distribuições que utilizam pacotes rpm podem ser configuradas automaticamente através do php-java-bridge-x.y.z-1-i386.rpm
  • Distribuições que utilizam pacotes deb podem ser configuradas automaticamente através do php-java-bridge_x.y.z-1_i386.deb
  • Outras distribuições podem ser instaladas a partir do arquivo código-fonte php-java-bridge_x.y.z.tar.gz, basta executar os comandos a seguir:
tar -zxvf php-java-bridge_*.tar.gz
cd php-java-bridge*
phpize && ./configure && make && sh install.sh

Disponíveis em: http://sourceforge.net/project/showfile … _id=117793
Execute um página no browser que tenha o <? phpinfo(); ?> e verifique se o módulo Java foi carregado corretamente.
Localize o arquivo de configuração do php (você pode, opcionalmente, criar um extra, nas instalações automáticas dos pacotes deb ou rpm isso é realizado automaticamente e é gerado um arquivo chamado java.ini, o endereço dele pode ser visto executando a página do phpinfo), neste arquivo configure os seguintes itens:

extension = java.so
java.java_home = /usr/lib/jvm/java-6-sun (diretório raiz do JDK)
java.java = /usr/lib/jvm/java-6-sun/jre/bin/java (arquivo binário java)

Pronto, o servidor apache agora é capaz de interpretar códigos java, nosso próximo passso é disponibilizar as bibliotecas necessárias para o jasperreports trabalhar. Para isso vamos copiar os jars necessários para a pasta $JAVA_INSTALL/jre/lib/ext/ neste exemplo copiei os seguintes arquivos:

commons-beanutils-1.8.0-BETA.jar - essencial para o jasper
commons-collections-3.2.1.jar - essencial para o jasper
commons-digester-1.8.jar - essencial para o jasper
commons-logging-1.1.1.jar - essencial para o jasper
iText-2.0.8.jar - biblioteca para gerar pdf
jasperreports-2.0.5.jar - essencial para o jasper
postgresql-8.3-603.jdbc3.jar - relatórios que conectam ao postgres

Para que o apache reconheça estas bibliotecas é necessário que reinice o servidor apache.

OBS.: Na instalação realizada na distruibuição linux Slackware, a compilação do código fonte do php-java-bridge, não gerou alguns jars necessários para o funcionamento do módulo Java para php, para solucionar este problema eu retirei estes jars contidos do pacote debian e inseri manualmente no diretório de módulos do php-java-bridge

Links

http://www.rjohnson.id.au/wordpress/200 … s-and-php/
http://php-java-bridge.sourceforge.net/
http://commons.apache.org/
http://www.lowagie.com/iText/
http://commons.apache.org/downloads/index.html
http://php-java-bridge.sourceforge.net/ … lation.php
http://www.hlegius.pro.br/integracao-ph … m-dificil/

Comments (18)

Murilo Aguiarnovembro 13th, 2008 at 10:52

Bom tuto … vc rodou algum relatório manda um exemplo de código aii .. valeu.

Thiago Büll Amorimabril 17th, 2009 at 10:33

Muito legal. Tem como vc mostrar um código em php chamando o relatorio do jasper? valeu!!!

Renatoabril 29th, 2009 at 8:40

Muito bom mesmo este tuto. Cara tem com você me mandar um código php
envocando o jasper??? Se tiver eu te agradeço muito, valeu

Lesliê Cardososetembro 16th, 2009 at 14:45

Realmente é uma ferramenta excelente, para se utilizar na geração de relatórios. Gostaria de saber se você já fez em ambiente windows, pois já tentei vários tutoriais, e muito deles estão muito obscuro para instalar e nenhum deles obtive sucesso.

Paulo Canedosetembro 16th, 2009 at 14:59

infelizmente o único ambiente que testei foi no slackware linux

Lesliê Cardososetembro 21st, 2009 at 11:30

Bom dia Paulo! Bem consegui instalar no windows e chamar o relatório. A conexão com o banco fiz dentro do iReports e visualizo tudo ok. Mas quando chamo o relatorio pelo php gera, mas os dados que faz conexão com a base retorna nulo. Logo creio que tenho que fazer a conexão com o banco e passar também. Gostaria de saber se tem algum exemplo dentro do php para fazer essa conexão com o banco. Comecei ate criar uma classe para isso mais quando instancio o objeto $conn = new Java(“java.sql.*”); Ele não acha.

Paulo Canedosetembro 21st, 2009 at 11:59

Olá Lesliê, na verdade você deve fazer a conexão do lado do Java, pelo php você vai apenas passar a string de conexão…

Hugo Neryoutubro 10th, 2009 at 11:42

Muito bom o Tutorial. :)
Teria como disponibilizar para download essas bibliotecas que faltaram para o Slackware?
ou mandar pro meu email?
valewww

Edsonnovembro 13th, 2009 at 7:02

Bom dia,

Alguém poderia enviar um exemplo?

Edson

Edson Lidoriodezembro 28th, 2009 at 23:08

Olá Paulo Canedo,

Seria possivél vc enviar um exemplo simplesde relatório usando relatórios jasper com PHP?

Grato,

Edson Lidorio

Lucas (Redesat)maio 10th, 2010 at 11:04

Essa mer.*%# de jasper todo bugado, e ai meu filho, sumiu uai, já ta na NASA (FU-NASA)? Brincadeiras a parte, to seguindo esse tutorial para interar o jasper com o rails http://oldwiki.rubyonrails.org/rails/pages/HowtoIntegrateJasperReports, but não funciona nem com reza, ele até gera o arquivo mas com 0 byte, fiz o layout no ireport e la ele gera de boa, to utilizando xpath para fazer a busca em xml…no ireport funciona que é uma beleza, mas na aplicação nem a pau..Tô utilizando o ubuntu para desenvolvimento, que é outra bomba….kkkkkkkkkkkkkkkk

Paulo Canedomaio 10th, 2010 at 11:27

moço tu ainda continua nesse rails? Pega uma linguagem de macho q tenha ponto-e-vírgula, rs…, vai pro php symphony, LOL… Cara, definitivamente não faço a mínima ideia de como se faz pra esse treco funfar no rails, já faz muito tempo que implementei isso do PHP com Jasper, eu só lembro que foi usando uma ponte entre o PHP e o Java, o php chamava código Java.

Depois me adiciona no gtalk (paulocanedo) pra gente trocar umas ideias… Falows…

Hugomaio 26th, 2010 at 23:02

Amigo poderia me dar uma ajuda? eu consegui fazer o php funcionar com o jasper seguindo este tutorial: http://zeronine.org/lab/index.php/Using_Jasper_report_with_PHP

O relatório até aparece pra download, mas qnd abro o pdf ele está em branco. A única coisa q tem no meu jrxml é um texto “Funcionou!!!” mas não aparece no pdf.
Sabes o que pode ser?

Paulo Canedomaio 28th, 2010 at 14:11

Tente rodar seu jrxml pelo iReport para ter certeza de que o jasper fonte está ok.

Madeiraabril 13th, 2011 at 14:01

Desenvolvi um relatório no iReport com duas páginas que são exibidas corretamente, mas ao passar os dados para PHPJasperXML o relatório é exibido em uma única página com os campos um por cima uns dos outros, porem no iReport é exibido corretamente em duas páginas. Alguém sabe como resolver este problema?

José Brandãomarço 23rd, 2013 at 11:18

Existe alguma maneira de “juntar” todos os jars necessários para a gereção do relatório?

Eu consegui fazer a integração do PHP com o Java, utilizando o JavaBridge. Ele gera o relatório com sucesso.

No entanto, o fato de ter que colocar os jars na pasta /lib/ext não me agradou muito. Então, gostaria de saber se existe alguma forma de “juntar” esses jars, tipo um pacote e deixar lá na pasta ext.

Caso alguém tenha alguma solução, favor entrar em contato: jfbransou@gmail.com

José Brandãomarço 24th, 2013 at 12:38

Tem como por juntar todos os jars necessários para geração do relatório em um só? Tipo fazer um pacote?

Leave a comment

Your comment