Categorias

Tutorial Criando Relatórios com JasperReports – Primeiros Passos

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

jasperreposts-1

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”

jasperreposts-2

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.

jasperreposts-3

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.

jasperreposts-4

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”

jasperreposts-5

Vamos criar o campo: nome.

2º Clique no campo que acabou de criar

3º Expanda a aba Propriedades

4º Configure o nome do campo.

jasperreposts-6

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:

jasperreposts-7

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”.

jasperreposts-8

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;

jasperreposts-9

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.

jasperreposts-10

Após adicionar todos os JARs do JasperReports, sua aba de Libraries deve ficar assim:

jasperreposts-11

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:

jasperreposts-13

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.

jasperreposts-14

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:

jasperreposts-15

A partir de agora, sua imaginação é seu guia!

Obrigado!