Sei sulla pagina 1di 7

Relatrios em Java JasperReports e iReport

Introduo
O JasperReports um framework para a gerao de relatrios. uma ferramenta
totalmente open source e gratuita, e a mais utilizada com esse propsito atualmente. Entre
as funcionalidades do JasperReports podemos destacar:
capaz de exportar relatrios para diversos formatos diferentes, tais como PDF,
HTML, XML, XLS, etc.
aceita diversas formas de entrada de dados, tais como um arquivo XML ou CSV,
conexo com o banco de dados, uma sesso do Hibernate, uma coleo de objetos
em memria, etc.
permite o uso de diagramas, grficos, e at cdigos de barras.

Como o JasperReports funciona?


Um aspecto importante do JasperReports que o layout do relatrio definido em um
arquivo XML, geralmente com a extenso .jrxml. Este XML possui todas as informaes de
formatao do relatrio, e alm disso, possui os campos que sero preenchidos
posteriormente, de acordo com a fonte de dados utilizada (data source). Como dito
anteriormente, a fonte de dados pode variar, e ser uma tabela em uma base de dados, ou
ser um arquivo CSV, porm a formatao do relatrio ser a mesma em ambos os casos.
Os passos para gerar um relatrio so bem simples. O primeiro passo compilar o
relatrio em XML. Depois da compilao, o resultado um objeto do tipo JasperReport. O
prximo passo preencher o relatrio com os dados, e o resultado dessa etapa fica
armazenado em um objeto do tipo JasperPrint. Esse objeto j representa o relatrio
finalizado, a partir dele podemos enviar para impresso diretamente, ou podemos exportar
para um outro formato, tal como PDF por exemplo. Veja um diagrama ilustrando o
processo completo:

O JasperReports pode ser baixado aqui. O download inclui, alm do jar do


prprio JasperReports, vrios outros jars do qual o JasperReports depende. Por exemplo,
caso voc utilize grficos no seu relatrio, precisar incluir o jfreechart no seu build path.
Por padro, qualquer projeto que utilize o JasperReportsprecisar incluir pelo menos as
seguintes jars:
commons-beanutils
commons-collections
commons-digester
commons-logging
groovy-all
iText
poi
jasperreports ( claro)

Para que serve o iReport?


O iReport uma ferramenta desenvolvida pela mesma empresa do JasperReports,
a JasperForge, e por isso muito comum ver os dois sendo usados em conjunto. Uma das
dificuldades ao trabalhar com os relatrios, est na definio do layout. complicado
escrever o layout totalmente em XML, sem ter que se aprofundar em todas as tags e
atributos possveis, e alm disso posicionar todos os elementos corretamente. Na prtica,
muito raro algum editar o JRXML manualmente, e sim apenas para fazer alguns
pequenos ajustes quando necessrios. O processo normal utilizar alguma ferramenta
para gerar o JRXML automaticamente, e oiReport utilizado com esse propsito.
O iReport um aplicativo grfico, que permite que voc desenhe um relatrio, utilizando
uma palheta, e arrastando e soltando componentes, de forma bem parecida com a criao
de interfaces e janelas para programas. Ao salvar, automaticamente ser gerado um
JRXML que voc poder utilizar na aplicao que estiver desenvolvendo. A vantagem
que no necessrio que voc conhea a fundo o XML a ser editado, economizando
tempo de desenvolvimento. Ele tambm traz um conjunto pronto de templates que voc j
pode utilizar diretamente, ou ento, escrever seus prprios templates e reaproveit-los
sempre que precisar criar um novo tipo de relatrio.

Criando um design com o iReport


Para o nosso exemplo, vamos utilizar o iReport para gerar o nosso JRXML. No vou me
aprofundar sobre a sintaxe do JRXML, vou apenas utilizar os recursos visuais oferecidos
pelo iReport. Uma boa dica para quem quer aprender mais a fundo, fazer alteraes
no layout visual, e depois mudar para a aba XML e verificar o que foi alterado. Dessa
forma voc pode ir aprendendo as tags e os atributos possveis no XML enquanto faz as
alteraes visualmente.
Vamos agora criar um design. Execute o iReport e voc ter uma tela parecida com a
abaixo:

Selecione o menu File->Open, e na janela de dilogo que surgir, escolha a aba


esquerda como Report e selecione o template Simple Blue.

Neste exemplo vamos utilizar um template j pronto, dessa forma no perdemos muito
tempo formatando a aparncia do relatrio. Ainda na mesma caixa de dilogo, clique no
boto Open this template. A caixa de dilogo seguinte ir pedir um nome do relatrio e
a pasta onde o mesmo ser salvo. Aps selecionar o nome e a pasta, clique em Next e
logo em seguida Finish.

Agora voc deve estar com uma imagem parecida com essa:

Muitos desses componentes que j foram includos por padro vo ser desnecessrios. No
lado direito, temos um Inspector mostrando os elementos do relatrio. Voc pode remover
os agrupamentos que foram adicionados, clicando nos elementos Group1 Group Header
e todos os demais, e aps isso, clique com boto direito e selecione a opo Remove
band. Apenas para comentar rapidamente sobre a estrutura de um relatrio, abaixo
temos as sees que so includas:
Title onde fica o ttulo do relatrio;
Page Header adiciona algum tipo de informao sobre o relatrio (por exemplo, o
ano vigente);
Column Header onde ficam os cabealhos da tabela;
Detail aqui ficam as linhas da tabela, a informao principal do relatrio;
Column Footer usado para o rodap da tabela;
Summary geralmente usado para uma concluso, diagrama ou grfico;
Page Footer informaes como data, pgina do relatrio, etc.
Todas estas sees no so obrigatrias. No nosso caso vamos utilizar apenas o Title,
o Column Header e oDetail por se tratar de um relatrio bem simples. Voc pode alterar o
texto dos elementos dando um clique duplo sobre ele, e depois colocar o texto novo, digite
enter.

A parte mais importante do relatrio a informao que deve ser mostrada. Acima eu j
indiquei que essa informao fica na seo Detail. O elemento que deve ser colocado
nesta seo chamado de campo (field), e a informao sobre os campos devem vir da
fonte de dados (data source), dessa forma oJasperReport j sabe de onde extrair a
informao que ser mostrada nesta seo. Para adicionar um novo campo ao nosso
relatrio, clique com o boto direito em Fields e selecione a opo Add field, e depois
clique sobre o campo que foi criado e o renomeie. Note que ele apenas criou o campo
no Inspector, mas esse campo ainda no foi adicionado ao nosso layout.

Para adicionar o campo ao relatrio, voc deve selecionar o campo no Inspector e


arrastar e soltar dentro do relatrio. Lembre-se que voc deve solt-lo dentro da
seo Detail. Por padro, o iReport ir adicionar automaticamente um cabealho na
seo Column Header correspondendo ao campo que voc acabou de adicionar. Depois
disso, voc pode reposicionar o elemento e redimensionar utilizando o mouse. No
exemplo, eu criei 3 campos: nome, e-mail e telefone. A ideia montar um relatrio

mostrando informaes sobre clientes, e esse so os campos do nosso futuro


objeto Cliente. No final, o relatrio deve ficar semelhante imagem abaixo:

Verso final do relatrio


No se preocupe se seu exemplo no ficar muito parecido, a aparncia do relatrio neste
caso apenas secundria, e voc ainda pode baixar o cdigo no final do artigo. Logo, no
necessrio perder muito tempo deixando o exemplo parecido.

Compilando e gerando o relatrio


Bem, agora que o relatrio est pronto, ns precisamos apenas do cdigo em Java que ir
gerar o arquivo pra gente. Neste exemplo, vou utilizar como data source uma ArrayList de
clientes. Assim o exemplo fica mais simples, e no necessria nenhuma configurao
extra em um banco de dados. Crie um projeto Java no Eclipse (ou outra IDE de sua
preferncia) e adicione as jars comentadas no incio do artigo ao build path do projeto.
Depois, adicione a classe cliente:
public class Cliente { private String nome; private
String email; private String telefone; public String
getNome() { return nome; } public void setNome(String
nome) { this.nome = nome; } public String getEmail() {
return email; } public void setEmail(String email) {
this.email = email; } public String getTelefone() {
return telefone; } public void setTelefone(String
telefone) { this.telefone = telefone; } }
Agora s precisamos adicionar uma classe com o mtodo main para gerar o arquivo PDF.
Veja abaixo o exemplo (com comentrios para facilitar a compreenso):
import java.sql.SQLException; import java.util.ArrayList;
import java.util.List; import
net.sf.jasperreports.engine.JRException; import
net.sf.jasperreports.engine.JasperCompileManager; import
net.sf.jasperreports.engine.JasperExportManager; import
net.sf.jasperreports.engine.JasperFillManager; import
net.sf.jasperreports.engine.JasperPrint; import
net.sf.jasperreports.engine.JasperReport; import
net.sf.jasperreports.engine.data.JRBeanCollectionDataSour

ce; public class RelatorioDeClientes { public static


void main(String[] args) throws JRException, SQLException
{ System.out.println("Gerando relatrio..."); // lista
com os nossos clientes List lista = new ArrayList();
Cliente c1 = new Cliente(); c1.setNome("Alexandre
Macedo"); c1.setEmail("alexbmac@gmail.com");
c1.setTelefone("9999-9999"); Cliente c2 = new Cliente();
c2.setNome("Rafael Cosentino");
c2.setEmail("cosen@gmail.com"); c2.setTelefone("88888888"); Cliente c3 = new Cliente(); c3.setNome("Daniel
Machado"); c3.setEmail("daniel@gmail.com");
c3.setTelefone("7777-7777"); lista.add(c1);
lista.add(c2); lista.add(c3); // compilacao do JRXML
JasperReport report = JasperCompileManager
.compileReport("relatorios/RelatorioClientes.jrxml"); //
preenchimento do relatorio, note que o metodo recebe 3
parametros: // 1 - o relatorio // // 2 - um Map, com
parametros que sao passados ao relatorio // no momento do
preenchimento. No nosso caso eh null, pois nao // estamos
usando nenhum parametro // // 3 - o data source. Note que
nao devemos passar a lista diretamente, // e sim
"transformar" em um data source utilizando a classe //
JRBeanCollectionDataSource JasperPrint print =
JasperFillManager.fillReport(report, null, new
JRBeanCollectionDataSource(lista)); // exportacao do
relatorio para outro formato, no caso PDF
JasperExportManager.exportReportToPdfFile(print,
"relatorios/RelatorioClientes.pdf");
System.out.println("Relatrio gerado."); } }
E pronto. S rodar o exemplo e se nada der errado, deveremos ter um arquivo PDF no
local indicado do cdigo. Neste exemplo, criei uma pasta chamada relatrios dentro da
pasta do projeto, que onde armazeno tanto o arquivo JRXML, quanto o PDF gerado
posteriormente.

Concluso
Esta foi uma rpida introduo ao JasperReports e iReport. Este um assunto bem
extenso, e no futuro teremos mais alguns exemplos mostrando como utilizar outras fontes
de dados (como uma conexo JDBC ou um arquivo XML), ou como customizar relatrio
um pouco mais, adicionando um grfico por exemplo. JasperReports bem completo, e
possui vrias funcionalidades alm das mostradas aqui, se voc quiser se aprofundar mais
deve conferir a documentao oficial.
Donwload do cdigo aqui.

Potrebbero piacerti anche