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/