Bom dia, boa tarde ou boa noite!
Aprenderemos neste tutorial como criar um relatório JasperReports e preenche-lo a partir de uma Lista de Beans, ou seja, sem a necessidade de acesso ao banco de dados.
O que me motivou a escrever este tutorial foi, justamente porque não encontrei nada parecido, nada básico o bastante para me guiar, quando precisei criar meu primeiro relatório utilizando JasperReports.
Não sei se minha situação(problema) é semelhante a de alguém. No meu caso, escrevi toda a aplicação utilizando JPA para camada de persistência. Após terminar todas as funções, passei para a parte de criar relatórios, foi onde pensei que criar um relatório e ter que escrever uma sentença SQL para obter os dados, seria um retrocesso, pois já contava com todo o mapeamento necessário para gerar as informações. Então, surgiram as dúvidas, e a solução foi passar um lista de objetos para o relatório.
Este tutorial está organizado em 5 partes:
- 1 Preparando o Ambiente
- 2 Criando a Classe de Dados
- 3 Criando o Relatório
- 4 Configurando os JARs para o JasperReport
- 5 Criando a Classe Para Manipular o Relatório
Vamos então colocar a mão na massa \0/
Preparando o Ambiente
Primeiro, vamos pensar na organização/pacotes de nosso pequeno projeto. Estou utilizando o Eclipse Kepler mas, nada o impedirá de usar sua IDE favorita.
Crie um projeto JavaSE nomeado RelatorioJasper
Utilizaremos os seguinte pacotes para organizar nosso projeto
jasper – Arquivos JasperReports
model – Beans que servem para representar nossos dados
relatorio – Classes responsáveis por gerar nosso relatórios
testes – Nossas classes para testar o relatórios
Criando a Classe de Dados
Primeiro, criaremos a classe/bean que representará nossos dados. Utilizaremos uma classe Cliente neste tutorial.
package br.com.rdtecnologia.model; public class Cliente { private int id; private String nome; private String endereco; private String complemento; private String uf; private String telefone; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getEndereco() { return endereco; } public void setEndereco(String endereco) { this.endereco = endereco; } public String getComplemento() { return complemento; } public void setComplemento(String complemento) { this.complemento = complemento; } public String getUf() { return uf; } public void setUf(String uf) { this.uf = uf; } public String getTelefone() { return telefone; } public void setTelefone(String telefone) { this.telefone = telefone; } }
Criando o Relatório
Utilizaremos a ferramenta iReport5.0 para criar nosso relatório. Ele pode ser baixado aqui https://www.4shared.com/zip/ZtsRzMJFce/iReport.html
Acessando a ferramenta iReport5.0
1º Clique no menu “Arquivo” e então “New…” será apresentada uma tela contendo diversas opções de relatório. Escolheremos a primeira opção “Report” e “Blank A4”
Existem outros templantes interessantíssimos, mas por hora, utilizaremos o Blank A4
2º Clique em “Open this Template”
Definindo o nome e o lugar do relatório
Em report name, defina o nome do relatório, em nosso caso será: Clientes
Em location, defina o diretório onde será salvo. Notem que utilizei o workspace do Eclipse e salvei direto no package br.com.rdtecnologia.jasper. Clique em Próximo e depois em Finalizar.
Após salvar o relatório, ele deve aparecer no package Jasper, conforme imagem ao lado. Caso não aparecesa, clique sobre o package e pressione F5.
Primeira visão ao relatório
Será apresentado um relatório em branco para podermos começar a brincar.
Neste momento, criaremos os campos(fields) do relatório. Estes campos devem ter o nome correspondente às propriedades da classe Cliente. Ex: (nome, endereco, complemento, uf, telefone)
1º Clique com botão direito em “fields” e “Adicionar Field”
Vamos criar o campo: nome.
2º Clique no campo que acabou de criar
3º Expanda a aba Propriedades
4º Configure o nome do campo.
Agora que você já sabe criar um campo, crie os demais.
Após criar todos os fields, seu relatório deve se parecer conforme imagem abaixo:
Para nosso relatório não ficar horrível muito feio, vamos inserir um título.
1º Expanda a aba Paletas;
2º Clique no componente Static Text e arraste-o até o relatório;
3º Clique no componente que acabou de inserir no relatório e edite-o com o texto “Relatório de Clientes”.
Pronto \0/! Nosso relatório está preparado para receber uma lista de clientes. Salve e feche o relatório.
Configurando os JARs para o JasperReport
Para que o JasperReports se comporte da forma esperada, temos que adicionar algumas bibliotecas ao projeto.
1º Clique com o botão direito sobre o projeto, em Build Path e Configure Build Path;
2º Clique em Add External JARs;
3º Selecione todos os JARs relativos ao JasperReport. Você pode baixar esse pacote de JARs aqui: https://www.4shared.com/zip/M15ld3lQce/JasperReport.html
4º Clique em Abrir.
Após adicionar todos os JARs do JasperReports, sua aba de Libraries deve ficar assim:
Criando a Classe Para Manipular o Relatório
No package relatorio, criaremos a classe que fara a ligação de nossa lista de Cliente com o relatório Jasper.
Nesta classe, implementaremos o método imprimir que receberá uma lista de clientes, a qual será enviada ao relatório.
Crie a classe com o seguinte código fonte:
package br.com.rdtecnologia.relatorio; import java.util.List; 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; import br.com.rdtecnologia.model.Cliente; public class ClienteREL { private String path; //Caminho base private String pathToReportPackage; // Caminho para o package onde estão armazenados os relatorios Jarper //Recupera os caminhos para que a classe possa encontrar os relatórios public ClienteREL() { this.path = this.getClass().getClassLoader().getResource("").getPath(); this.pathToReportPackage = this.path + "br/com/rdtecnologia/jasper/"; System.out.println(path); } //Imprime/gera uma lista de Clientes public void imprimir(List clientes) throws Exception { JasperReport report = JasperCompileManager.compileReport(this.getPathToReportPackage() + "Clientes.jrxml"); JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(clientes)); JasperExportManager.exportReportToPdfFile(print, "c:/Relatorio_de_Clientes.pdf"); } public String getPathToReportPackage() { return this.pathToReportPackage; } public String getPath() { return this.path; } }
Agora, temos que criar uma classe para testar nosso relatório. Criaremos esta nova classe no package testes. Crie a classe conforme o código fonte abaixo:
package br.com.rdtecnologia.testes; import java.util.ArrayList; import java.util.List; import br.com.rdtecnologia.model.Cliente; import br.com.rdtecnologia.relatorio.ClienteREL; public class RelatorioTeste { public static void main(String[] args) { try{ List clientes = new ArrayList(); Cliente Cliente1 = new Cliente(); Cliente1.setNome("RD Tecnologia"); Cliente1.setEndereco("Rua Guaranis, Ipatinga"); Cliente1.setComplemento("Sala 105"); Cliente1.setTelefone("8888-5566"); Cliente1.setUf("MG"); Cliente Cliente2 = new Cliente(); Cliente2.setNome("Romero Gonçalves Dias"); Cliente2.setEndereco("Av Uruguai, Belo Horizonte"); Cliente2.setComplemento("3º Andar"); Cliente2.setUf("MG"); Cliente Cliente3 = new Cliente(); Cliente3.setNome("FLC Tecnologia"); Cliente3.setEndereco("Rua Aricanduva, São Paulo"); Cliente3.setComplemento("Sala 23"); Cliente1.setTelefone("98523-1234"); Cliente3.setUf("SP"); clientes.add(Cliente1); clientes.add(Cliente2); clientes.add(Cliente3); ClienteREL relatorio = new ClienteREL(); relatorio.imprimir(clientes); } catch(Exception e){ System.out.println(e.getMessage()); } } }
Então, acabamos de terminar nosso pequeno projeto RelatorioJasper.
E esperado que sua estrutura de pacotes e classes fique conforme imagem a baixo.
Então, nos resta rodarmos a classe RelatorioTeste.java e verificar em “c:/Relatorio_de_Clientes.pdf” se o arquivo foi gerado com sucesso.
O relatório deve estar como demostrado na figura abaixo:
A partir de agora, sua imaginação é seu guia!
Obrigado!