sso um relatório mestre-detalhe usando o JasperReports e o iReport. Vamos criar também uma aplicação web que gera o relatório

Funcionamento do JasperReports

O JasperReports é uma biblioteca para a geração de relatórios open source e escrita em Java. Com ela é possível enviar o relatório gerado diretamente para a tela ou impressora, armazenar esse conteúdo em disco em forma serializada, e transformá-lo em um documento nos formatos PDF, HTML, XLS, RTF, CSV, TXT ou XML. Relatórios criados com o JasperReports podem ser usados tanto em aplicações web quanto desktop. O JasperReports e o iReport já foram apresentados na Java Magazine, nas Edições 13 e 21.

O processo de desenvolvimento de um relatório (veja a Figura 1) começa com a codificação da definição do relatório em XML, usando tags e atributos (que estão definidos no arquivo jasperreports.dtd). Depois é criado um arquivo com a extensão .jrxml (o “template de relatório”), onde é descrita toda a estrutura do relatório: a posição de textos, imagens e formas geométricas; como recuperar os dados necessários, como fazer cálculos de totalização, e quais parâmetros devem ser passados, entre outras definições.

Processo de desenvolvimento de um relatório com JasperReports
Figura 1. Processo de desenvolvimento de um relatório com JasperReports

Em seguida é preciso compilar o arquivo .jrxml. O resultado da compilação é um arquivo com extensão .jasper, que nada mais é que uma classe Java compilada, sendo representado por um objeto da classe JasperReport.

Após a compilação, precisamos de uma fonte de dados para produzir os dados a serem exibidos no relatório. A fonte de dados pode ser um datasource, ou uma conexão ao banco de dados e uma query SQL. Caso seja um datasource, a fonte de dados deve ser disponibilizada para o relatório na forma de uma classe que implemente a interface JRDataSource. Já existem algumas implementações prontas como as de coleções e arrays de JavaBeans (JRBeanArrayDataSource e JRBeanCollectionDataSource), ou a utilizando ResultSet (JRResultSetDataSource).

Tendo o objeto JasperReport e a fonte de dados, além de um objeto Map com alguns parâmetros, podemos fazer o preenchimento do relatório. O resultado é um objeto da classe JasperPrint, que pode ser serializado como um arquivo com a extensão .jrprint. O objeto JasperPrint é o relatório final em um formato proprietário do JasperReports. Ele pode ser visualizado diretamente com um aplicativo chamado JasperViewer que vem com o JasperReports, ou ser exportado para os formatos mencionados anteriormente.

O quadro “Glossário do JasperReports” apresenta conceitos fundamentais do JasperReports usados neste artigo.

Sobre o iReport

O iReport é uma ferramenta visual que usa o JasperReports internamente e facilita muito o trabalho do desenvolvedor na criação de relatórios, desde os mais simples até os mais complexos. No iReport é possível editar visualmente um arquivo de template de relatório (.jrxml), e gerar o arquivo .jasper, entre outras operações.

Quando utilizamos uma conexão a um banco de dados ao invés de um datasource, o iReport permite que o relatório seja executado e exportado para diversos formatos. Já quando utilizamos um datasource, é necessário executar o relatório dentro de uma classe Java. Mais detalhes sobre o funcionamento do iReport e sua operação são apresentados nas seções a seguir.

Instalação

Tanto o JasperReports como o iReport estão disponíveis em arquivos ZIP contendo as classes, fontes, JARs etc. (veja no final os links para download), e podem ser instalados em qualquer plataforma com suporte a Java. Basta descompactar o arquivo na pasta desejada; não é preciso nenhuma configuração especial. Há também instaladores nativos do iReport, para Windows e Mac OS X.

Para a criação de relatórios, pode-se baixar somente o iReport, pois este já vem com o JAR da biblioteca JasperReports e todas as outras que são necessárias para a compilação mais simples, além das bibliotecas específicas para geração de determinados formatos de arquivo. Já se você também baixar o JasperReports em separado, terá adicionalmente uma documentação básica da API, os arquivos-fonte da biblioteca e uma grande quantidade de projetos de demonstração.

Para iniciar o iReport, vá até o diretório raiz da ferramenta e execute o arquivo iReport.sh, caso esteja utilizando Linux; ou em Windows, execute iReport.bat ou iReport.exe.

No caso de usar um dos arquivos de script (.sh ou .bat), pode ser necessário editá-lo e acrescentar a linha “set classpath=.” no começo do arquivo, para evitar conflitos de classes que estão no classpath e erros na compilação do relatório.

Sobre o projeto de exemplo

Como exemplo, vamos criar um projeto baseado em quatro entidades principais: pedidos, itens de pedido, clientes e produtos. Nosso objetivo é gerar um relatório de pedidos com seus itens, sendo que um pedido tem um cliente e cada item tem um produto.

O projeto completo, com todas as classes necessárias, os templates de relatório .jrxml e o script para criação do banco de dados, está disponível no site da Java Magazine. Nas listagens apresentadas neste artigo, alguns trechos dos arquivos são omitidos para poupar espaço.

Para o exemplo, precisamos de um banco de dados que fornecerá os dados para o relatório; usamos o MySQL. Chamamos a base de dados de “ecommerce” e registramos um usuário e uma senha. O modelo de dados é mostrado na Figura 2 (o script completo para a criação da base está incluído no arquivo de download).

Modelo de dados do projeto de exemplo
Figura 2. Modelo de dados do projeto de exemplo

A aplicação de exemplo será baseada na web. Vamos criar um servlet que obtém a conexão com o banco de dados, carrega os arquivos de relatório compilados .jasper, passa parâmetros e a fonte de dados exigidos pelo relatório, executa o relatório exportando para o formato PDF e finalmente manda o resultado para a tela do navegador web. Utilizamos também um JSP muito simples, ...

Quer ler esse conteúdo completo? Tenha acesso completo