Você está na página 1de 11

Home

Cursos
Apostilas
Arquivos
Artigos
Aula Particular
Sobre
Contato
Relatrios em Java JasperReports e iReport
sbado, 20 de novembro de 2010 por Alexandre Macedo
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:
111 pessoas curtiram isso. Curtir
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 JasperReports precisar 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 o iReport
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.
O iReport pode ser baixado aqui.
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 o
Detail 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 o
JasperReport 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, email e telefone. A idia 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 necessrio 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.JRBeanCollectionDataSource;
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("8888-8888");
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 relatorios 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. O 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.
111 pessoas curtiram isso. Curtir
Comentar
Comentar...
Bruno Leo Marista
Muito bom!
Responder Curtir 16 de julho s 06:33 2
Geovane Smilly GS Instrutor de Informtica na empresa Escola Novo
Horizonte - PVA
tima ferramenta para relatrio Jasper
Responder Curtir 1 de julho s 13:47
Aridja C. Andr Trabalha na empresa Estudante
bom ++
Responder Curtir 13 de junho s 08:08
Alex Giro Analsita de sistemas na empresa Secretaria Municipal
de Finanas de Fortaleza
Excelente!
Responder Curtir 22 de maio s 16:08
Tito Oliveira Unesulbahia Faculdades Integradas
mas como q eu fao para escrever meus prprios templates?
Responder Curtir 31 de janeiro s 09:15
Carlos Borges Quem mais comentou Comp Facape
Muito bom, valeu pela iniciativa.
Responder Curtir 15 de janeiro s 17:01
Curtir
Talvez voc tambm curta
Apostila Gratuita de SQL e Banco de Dados
Relacional
156 pessoas curtiram isso.
Retrospectiva 2013 e Resolues para
2014
20 pessoas curtiram isso.
Plug-in social do Facebook
Responder Curtir 15 de janeiro s 17:01
Vandr Borba Trevisan Ferreira Colgio Plato de Apucarana
Valeu cara, obrigado pelo tutorial. Me ajudou bastante.
Responder Curtir 24 de agosto de 2013 s 05:08 2
Jose Tala Nsuami Quem mais comentou UCAN
Muito bom, gostei
Responder Curtir 20 de agosto de 2013 s 03:01 2
Leonardo Albuquerque Programador na empresa Centro
Universitrio Adventista de So Paulo
Acara, achei muito massa o tutorial, porm estou tendo problemas
com a lista de objetos que estou passando, pois dentro dela tenho
objetos do tipo Aluno e esses alunos pertencem a um Curso e no
report fiz o relacionamento certinho e no NetBeans aparece de boa
o Curso, porm no java aparece com.Curso. id[1] etc. Sabe como
resolver isso??
Responder Curtir 9 de maio de 2013 s 05:47
Lucas Marques de Oliveira Faculdade Anhanguera de
Jundia
para eu fazer um relatrio web como seria ?
Responder Curtir 21 de outubro de 2013 s 12:13
Rudson Porfirio Quem mais comentou Trabalha na
empresa NAUM INTERESSA
Fiz tudo igual mais deu erro alguem me ajuda :
Baixei o projeto blz rodo de boa.Mais :
So fiz copiar o RelatorioClientes.jrxml e alterei o nome
para RelatorioAlunos.jrxml e da o mesmo erro. Rodando
no mesmo projeto e da erro, parece que so funciona
com o que baixei
.
[code]
Out 24, 2013 4:28:41 PM org.apache.commons.digeste
r.Digester error
Grave: Parse Error at line 2 column 462: cvc-complex-
type.3.2.2: O atributo 'uuid' no pode aparecer no
elemento 'jasperReport'.
org.xml.sax.SAXParseException; lineNumber: 2;
columnNumber: 462; cvc-complex-type.3.2.2: O atributo
'uuid' no pode aparecer no elemento 'jasperReport'.
at com.sun.org.apache.xerces.internal.util.ErrorHandler
Wrapper.createSAXParseExce
ption(ErrorHandlerWrapper.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandler
Wrapper.error(ErrorHandlerWrapper.jav... Ver mais
Responder Curtir 24 de outubro de 2013 s 12:31
Arthur Luiz Tavares Quem mais comentou Analista
Implementador na empresa Softplan
Voc deve criar sub-reports (novos jaspers) para cada
sub-lista que voc quiser apresentar dentro do seu
relatrio. Evite passar objetos inteiros para o iReport.
Crie um bean s com variveis (String, Integer,
LocalDate, Date, Double, etc...) para passar para o
iReport.
Responder Curtir 4 de novembro de 2013 s 02:36
Tags: ireport, jasperreports, java, relatorios, tutorial
Este artigo foi publicado sbado, 20 de novembro de 2010 s 14:26 na(s) categoria(s) Programao. Voc pode acompanhar os
comentrios deste artigo atravs do feed RSS 2.0. Voc pode deixar um comentrio ou utilizar a URL de trackback em seu prprio
site.
Scala Primeiros Passos
Aprendendo Scala Parte 2
Pesquisar por: Pesquisar
Categorias
Anlise de Negcio (1)
Apostila .NET (7)
Apostila Android (1)
Apostila CSS (3)
Apostila HTML (3)
Apostila Java (13)
Apostila JavaScript (3)
Apostila jQuery (3)
Apostila SQL (1)
Apostilas (23)
Curso .NET (5)
Curso Java (7)
Cursos (2)
Notcias (29)
OCJP (3)
Programao (52)
K19 Treinamentos
Seguro Treinamento
Material Didtico
Para Empresas
Treinamentos in-company
Turmas especiais

Equipe K19
Colaboradores e Parceiros
Fale com a K19
Contato
Localizao
Plug-in social do Facebook

Poltica de Privacidade
Sobre a K19
Redes Sociais


Depoimentos
Arquivos

Você também pode gostar