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/

19 thoughts on “Usando relatórios jasper com PHP

  1. 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

  2. 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.

  3. 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.

  4. Olá Paulo Canedo,

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

    Grato,

    Edson Lidorio

  5. 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

  6. 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…

  7. 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?

  8. 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

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

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>