Esse artigo faz parte da revista Java Magazine edição 13. Clique aqui para ler todos os artigos desta edição.

isuais em seus ambientes de desenvolvimento RAD, desde que o Visual Basic 3 incorporou uma versão re­duzida do Crystal Reports. O Java 2 SDK e alguns IDEs populares como o Eclipse e o NetBeans ainda não incluem ferramentas do gênero, de modo que muitos desenvol­vedores acreditam – erroneamente – que este tipo de facilidade não está disponível em Java.

 

  Parte do problema vem do fato da maio­ria dos geradores de relatórios populares serem aplicações independentes escritas em C, em muitos dos casos suportando apenas a plataforma Windows. São por­tanto incompatíveis com o objetivo de portabilidade do Java. Outra parte vem do fato da maioria desses geradores estarem disponíveis para aquisição em separado e, por meio de chamadas a JNI ou requisições HTTP, poderem ser utilizados como parte de qualquer sistema, independentemente da linguagem de programação na qual foram escritos – eliminando assim a ne­cessidade de se criar versões dos produtos específicas para o desenvolvimento Java.

 

  Mas isto não quer dizer que não existam geradores de relatórios escritos em Java. Na verdade, existem muitos, inclusive vários premiados por publicações especializadas. Utilizar um gerador escrito em Java tem muitas vantagens além da porta­bilidade, por exemplo, usar como fonte de dados coleções de objetos Java recuperadas via EJBs, Hibernate, JAXB ou web services. Geradores escritos em outras linguagens necessitarão acesso direto ao banco de dados, e não poderá interagir de forma fácil com objetos Java.

Existem várias opções de geradores de relatórios livres em Java, capazes de aten­der à maioria dos desenvolvedores (veja o quadro “Mais alternativo livres”).

 

  Neste artigo serão vistas duas ferramentas que se complementam mutuamente: o Jasper­Reports e o iReport.

Não se assuste com a numeração de versão destes dois programas (ambos 0.x), pois um software livre atinge a versão 1.0 apenas quando implementa, de forma confiável, todo o conjunto de features “sonhadas” pelo autor ao iniciar o projeto. Muitas versões 0.x de software livre estão tão ricas e maduras quanto versões 5.x de softwares proprietários, onde a numeração de versões segue mais critérios comerciais do que tecnológicos.

Desenhando ou gerando relatórios

O JasperReports é um engine para a geração de relatórios, escrito inteiramente em Java, que recebe como entrada uma descrição estruturada do relatório na for­ma de um documento XML, e gera a saída diretamente na impressora (incluindo uma pré-visualização baseada em Swing), ou como um documento PDF, HTML, XLS ou CSV. Já o iReport é um “desenhador” visual de relatórios, também escrito em Java, que gera descrições XML no formato esperado pelo JasperReports. O quadro Desenhadores alternativos” cita outros softwares que poderiam ser utilizados em substituição ao iReport.

Seria possível gerar relatórios utilizando apenas o JasperReports – bastaria editar a descrição manualmente, de preferência com um editor especializado em XML. É fornecido inclusive o DTD que define o dialeto XML reconhecido pela ferramenta.

 

  Além disso, algumas empresas apreciarão a possibilidade de gerar relatórios para o JasperReports diretamente a partir de documentos XML, mediante transforma­ções XSL (não inclusas no JasperReports). Uma quantidade crescente de sistemas adota esta estratégia, em vez do design visual tradicional nas ferramentas RAD.
Por outro lado, se você prefere o modelo RAD tradicional, o iReport cumpre esta função, executando o JasperReports “por baixo dos panos”, e permitindo gerar relatórios sem necessidade de escrever código Java.

Instalação do iReport

Seguindo o caminho mais fácil, vamos iniciar pelo iReport (veja no quadro “Abandonando o lado negro” um pouco da sua história). Esta será uma exploração sem compromisso por alguns dos menus e diálogos do programa, dando uma idéia de suas capacidades e idiossincrasias, para que depois possamos apresentar com mais detalhes a estrutura de um relatório do JasperReports e seu uso programático.

 

  Baixe a versão mais recente do pacote iReport0.2.x.zip no site do programa (0.2.3 quando da escrita deste artigo) – mas não baixe o pacote iReport0.2.x_nolib.zip – e descompacte o pacote em um diretório à sua escolha. Cuidado, pois o pacote não fornece uma raiz comum para todos os arquivos inclusos (recomendo criar um diretório para agrupar os arquivos des­compactados).

 

  A distribuição do iReport inclui fontes, no diretório src, além dos bytecodes corres­pondentes no diretório classes, mas utiliza o Ant (na recente versão 1.6 ou posterior) para gerar o classpath necessário à exe­cução. Também deve estar disponível um JSDK e não apenas um JRE – o motivo será visto mais à frente.

O subdiretório noAnt fornece arquivos .sh e .bat apropriados para a execução do iReport em ambientes Linux e Windows,
sem que seja necessário instalar o Ant. Entretanto, usuários de Linux e outros sistemas Unix devem tomar cuidado, pois os scripts estão no formato Windows, com finais de linha CR+LF, e não serão aceitos pelo shell, a menos que sejam
convertidos para o formato Unix (com finais de linha LF).

 

  Assim sendo, entre no diretório criado para a descompactação do iReport, e execute ant iReport, ou, alternativamente, execute sh startup.sh (startup.bat no Windows) a partir do subdiretório noAnt para iniciar o iReport. Tanto os scripts na raiz de insta­lação do iReport quanto os no subdiretório noAnt podem ter que ser modificados para o ambiente do usuário.

Cuidado! Há uma série de pacotes JAR no subdiretório lib, como iText, POI, Xerces, o próprio JasperReports e várias bibliotecas do Jakarta Commons. Eles são necessários para a execução do iReport, mas tome cuidado pois, caso algum deles esteja também presente no classpath do seu sistema operacional, poderá haver conflitos de versão. Se isso acontecer, modifique os scripts de inicialização (iReport.bat/sh e startup.bat/sh) para configurar inicial­mente um classpath vazio, contendo apenas o pacote tools.jar do Java 2 SDK.

 

  No pacote ZIP baixado, todas as bibliote­cas necessárias já estão disponíveis, inclu­sive o JasperReports 0.5.2 e drivers JDBC para alguns bancos de dados livres. Caso deseje disponibilizar outros drivers, basta copiar os pacotes JAR correspondentes para o subdiretório db_drivers.

Nota: Em algumas plataformas (por exemplo, no Windows 98), os pacotes no subdiretório db_drivers podem não ser incorporados correta­mente ao classpath. Neste caso, copie os drivers JDBC desejados para o subdiretório lib.

Instalação do iReport

Seguindo o caminho mais fácil, vamos iniciar pelo iReport (veja no quadro “Abandonando o lado negro” um pouco da sua história). Esta será uma exploração sem compromisso por alguns dos menus e diálogos do programa, dando uma idéia de suas capacidades e idiossincrasias, para que depois possamos apresentar com mais detalhes a estrutura de um relatório do JasperReports e seu uso programático.

 

  Baixe a versão mais recente do pacote iReport0.2.x.zip no site do programa (0.2.3 quando da escrita deste artigo) – mas não baixe o pacote iReport0.2.x_nolib.zip – e descompacte o pacote em um diretório à sua escolha. Cuidado, pois o pacote não fornece uma raiz comum para todos os arquivos inclusos (recomendo criar um diretório para agrupar os arquivos des­compactados).

A distribuição do iReport inclui fontes, no diretório src, além dos bytecodes corres­pondentes no diretório classes, mas utiliza o Ant (na recente versão 1.6 ou posterior) para gerar o classpath necessário à exe­cução. Também deve estar disponível um JSDK e não apenas um JRE – o motivo será visto mais à frente.

 

  O subdiretório noAnt fornece arquivos .sh e .bat apropriados para a execução do iReport em ambientes Linux e Windows, sem que seja necessário instalar o Ant. Entretanto, usuários de Linux e outros sistemas Unix devem tomar cuidado, pois os scripts estão no formato Windows, com finais de linha CR+LF, e não serão aceitos pelo shell, a menos que sejam convertidos para o formato Unix (com finais de linha LF).

 

  Assim sendo, entre no diretório criado para a descompactação do iReport, e execute ant iReport, ou, alternativamente, execute sh startup.sh (startup.bat no Windows) a partir do subdiretório noAnt para iniciar o iReport. Tanto os scripts na raiz de insta­lação do iReport quanto os no subdiretório noAnt podem ter que ser modificados para o ambiente do usuário.

  Cuidado! Há uma série de pacotes JAR no subdiretório lib, como iText, POI, Xerces, o próprio JasperReports e várias bibliotecas do Jakarta Commons. Eles são necessários para a execução do iReport, mas tome cuidado pois, caso algum deles esteja também presente no classpath do seu sistema operacional, poderá haver conflitos de versão. Se isso acontecer, modifique os scripts de inicialização (iReport.bat/sh e startup.bat/sh) para configurar inicial­mente um classpath vazio, contendo apenas o pacote tools.jar do Java 2 SDK.

No pacote ZIP baixado, todas as bibliote­cas necessárias já estão disponíveis, inclu­sive o JasperReports 0.5.2 e drivers JDBC para alguns bancos de dados livres. Caso deseje disponibilizar outros drivers, basta copiar os pacotes JAR correspondentes para o subdiretório db_drivers.

Nota: Em algumas plataformas (por exemplo, no Windows 98), os pacotes no subdiretório db_drivers podem não ser incorporados correta­mente ao classpath. Neste caso, copie os drivers JDBC desejados para o subdiretório lib.

 

 

Mais alternativas livres

Conheça algumas ferramentas que podem ser usadas em substituição ou como com­plemento ao JasperReports/iReport:

JFreeReport (www.jfree.org/jfreereport) – segue a mesma filosofia do JasperReports; gera relatórios em vários formatos diferen­tes a partir de uma descrição em XML, sem incluir um editor visual para estas descrições. Sua descrição é mais “verbosa” do que o JasperReports, mas o JFreeReport também é um projeto maduro e reconhecido pela comunidade. Nele, os dados para os relatórios são obtidos de um TableModel do Swing, o que facilita sua incorporação a aplicações gráficas (mas a dificulta em aplicações web). A mesma organização mantém o JFreeChart (veja o quadro “Gráficos e imagens em relatórios”).

eSuite (jeez.sf.net) – um conjunto de plug-ins para o Eclipse que fornece suporte ao JFreeReport; inclui um editor visual para as descrições de relatórios.

JReporter (jreporter.sf.net) – outra opção de biblioteca de classes Java para a geração de relatórios. Fornece classes utilitárias, como diálogos para a configuração da impressora, mas não existe ainda um desenhador visual dos seus relatórios.

DataVision (datavision.sf.net) – gerador de relatórios mais tradicional, que incorpora tan­to o desenhador visual dos layouts quanto os componentes para a execução dos relatórios pelas aplicações.

 

O banco de dados de exemplo

Antes de tudo, é necessário ter um banco de dados pronto para alimentar o re­latório. Nossos exemplos serão construídos sobre um banco simples, contendo sumá­rios de vendas por região e por produto. A Listagem 1 inclui um script SQL que cria as tabelas e insere alguns dados (com registros omitidos para poupar espaço). O código completo do script pode ser baixado no site da Java Magazine.

Será utilizado o banco de dados
HSQLDB (apresentado na Edição 7), pois assim o exemplo poderá ser executado facilmente em qualquer plataforma. O iReport já inclui o driver JDBC e o próprio
servidor do HSQLDB. Este será utilizado no modo StandAlone (de acesso direto aos arquivos) apenas por comodidade – um ambiente de produção utilizaria o modo Server para permitir o acesso mul­tiusuário.

Inclua o pacote <ireport>/db_drivers/
hsqldb*.jar
no seu classpath e execute o co­mando a seguir (em uma única linha) para rodar o script de criação das tabelas:

java org.hsqldb.util.ScriptTool

  -url jdbc:hsqldb:

  -database /home/lozano/vendas

  -script vendas.sql

Nota: O iReport inclui o HSQLDB 1.7.2RC2, que utiliza formatos de arquivos incompatíveis com versões anteriores, como a 1.7.1. Portanto, tenha certeza de utilizar o pacote JAR forne­cido e não outra versão dos JARs do HSQLDB que você tenha instalada.

 

  Não se esqueça de substituir “/home/lozano” pelo diretório onde você deseja armazenar seus arquivos de bancos de dados. Qualquer mensagem diferente de “update count 0” ou “update count 1” indica que houve algum erro na criação do banco – provavelmente as classes do HSQLDB não foram adicionadas correta­mente ao classpath, ou você não tem acesso ao diretório escolhido para a criação dos arquivos, ou ainda o banco de dados está em uso por outro processo. ...

Quer ler esse conteúdo completo? Tenha acesso completo