Você está na página 1de 15

TUTORIAL SUBREPORT IREPORT A .

Criar o Relatrio
1. Abra um novo Relatrio

1.1 Arquivo > New

1.2 Escolha o tipo do layout do Relatrio

1.3 Escolha do nome do relatrio

1.4 Finalizando

2. Escolha as Bands que ser necessria para montar o Relatrio. Nesse exemplo trabalharemos com as bands Title , Column Header e Detail .

Excluindo a Column Footer

Repare que a Band Column Footer desapareceu.

. 2.1 Excluindo Band. 2.2 Band Excluda.

Exclua todas as outra Bands que no ser necessrias (Title, Page Header , Column Footer , Page Footer e Summary). 3. Inserindo os Fields Ser adicionado as seguintes Fields : nome curso ListaDisciplinas OBS IMPORTANTE : No Field Class do Field ListaDisciplinas tem que ser um Object

3.1 Adicionando um Field.

3.2 Editando Field No campo name, digite o nome da Field.

3.3 Todas as Fields adicionadas.

OBS IMPORTANTE : , No Field Class do Field ListaDisciplinas tem que ser um Object

4 . Montando o Relatrio Adicione as Field no column Header Para adicionar as field clique nela e arraste at aonde voc deseja inserir ( neste caso ser na Column Header). Ao terminar de inserir aparecer uma janela de um ok.

4.3 clique em OK Crie um titulo para Relatrio Clique em paleta e procure o Text static arraste ele at a rea desejada (Column Header ) e digite o titulo do relatrio.

Text Static
Field

4.2 Imagem de como ter que ficar .

B . MONTANDO O SUBRELATORIO
1. Clique no cone Subrelatorio

1.2 cone do SubRelatorio. 2. Abrira uma janela com o Assistente do SubReport.

2.1 Escolha a opo Create new report , pois no temos nenhum outro subReport criado , caso j possua escolha a opo Use an existing report.

2.2 Escoha o layout .

2.3 Mantenha a opo Default .

2.4 Mantenha a opo Default .

2.5 Mantenha a opo Default .

2.6 Coloque o nome do arquivo e onde ele ira ficar salvo

Clique no Field ListaDisciplina

2.7 . Marque a opo Use JRDataSource Expression . E Finalize.

3. Montando o Subrelatorio 3.1 Delete as bands que no serao necessarias ( Title, Page Header, Column Header, Column Footer , Page Footer e Summary). Deixe somente a Detail . 3.2 Colocando os Fields Necessario . nome cargaHoraria 3.1 Adicione os Fields no Detail .

3.1.1 Os Fields na Band Detail . 3.4 V em propriedade

3.4.1 Boto Direito no icone > Propriedades .

3.4. 2 Mude a Language Groovy para java . OBS : FAA A MESMA CONFIGURAO NO RELATORIO PRINCIPAL TAMBEM .

C. CONFIGURANDO O SUBRELATORIO .

1. Volte para o RelAluno ( Relatorio Principal ) ,v em Parametros . Repare que doi criado um Parametro chamado SUBREPORT_DIR . Clique com o boto direiro para Renomear esse Parametro .

1.1 Alterando o nome do Parametro que faz a conexo entre o Relatorio e o SubRelatorio .

2 Fazendo Configurao .

2.1 Clique no Subrelatorio e v em Propriedades . As configuraes em propriedades sero as seguintes 1. SubReport Expression clique no icone . ir abrir uma janela ,apague o que est escrito , em seguida clique em

Parameters e procuro o parametro criado no item acima (pathsubRel). 2. Verifique se a opo Expression Class est selecionado com java.lang.String e se o using Cache est selecionado . 3. Connection type Selecione o Use a datasource expression . 4. Verifique se no Data Source Expression est janela , clique em Fields e procure o ListaDisciplina . 5. Parameters clique no icone . clique em add , em seguida abrir uma janela . no campo SubReport parameter . Clique em Fields e procure o , caso no esteja ,clique no icone . ir abri uma

name digite o nome do seu parametro , e em value Expression clique no icone ListaDisciplina.

1 2

3 4 5

D. COMPILANDO

Copile os dois Relatrio ( O relatrio Principal(RelAlunos) e o SubRelatorio (RelAlunosDisciplina)) Para copilar clique com o boto direito do nome do Relatrio e clique me Compile Report .

1.1 Boto direito

1.2 Compilando

OBS : NA HORA DE SALVAR OS DOIS RELATORIOS , SALVE NA PASTA QUE VOC CRIAR A SUA MAIN PARA GERAR O RELATORIO , NO CASO DESSE EXEMPLO SER NA PASTA JASPER .

E. DESENVOLVIMENTO DA CLASSE JAVA


1. Crie dois packages um chamado vo e outro jasper. 1.1 no package vo crie as seguintes classes . Aluno Essa classe ser responsvel pelo preenchimento do relatrio principal .
package vo; import java.io.Serializable; import java.util.ArrayList; /** * CLASSE RESPONSAVEL POR PREENCHER O RELATORIO PRINCIPAL * @author RJFurutani * @04/05/2005 */ public class Aluno implements Serializable{ private String nome; private String curso; private ArrayList disciplinas; /** * CONSTRUTOR * @param nome * @param curso * @param disciplinas */ public Aluno(String nome, String curso, ArrayList disciplinas) { super();// indica que ser utilizado o construtor da classe pai this.nome = nome; this.curso = curso; this.disciplinas = disciplinas; } /** * GETTER AND SETTERS * @return */ public String getCurso() { return curso; } /** * @param curso The curso to set. */ public void setCurso(String curso) {

this.curso = curso; } /** * @return Returns the disciplinas. */ public ArrayList getDisciplinas() { return disciplinas; } /** * @param disciplinas The disciplinas to set. */ public void setDisciplinas(ArrayList disciplinas) { this.disciplinas = disciplinas; } /** * @return Returns the nome. */ public String getNome() { return nome; } /** * @param nome The nome to set. */ public void setNome(String nome) { this.nome = nome; } }

Disciplina Essa classe ser responsvel pelo preenchimento do subRelatorio.


package vo; /** * "vo" significa Value Object * Esse pacote so criados os Value Object */ import java.io.Serializable; /** * @author RJFurutani * @04/05/2005 * Classe responsavel por preencher o subRelatorio */ public class Disciplina implements Serializable{ private String nome; private String cargaHoraria; /** * CONSTRUTOR DA CLASSE * @param nome * @param cargaHoraria */ public Disciplina(String nome, String cargaHoraria) { super(); // indica que ser utilizado o construtor da classe pai this.nome = nome; this.cargaHoraria = cargaHoraria; } /** * GETTERS AND SETTERS * @return */ public String getCargaHoraria() { return cargaHoraria; } public void setCargaHoraria(String cargaHoraria) { this.cargaHoraria = cargaHoraria;

} public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } }

1.2 Criar no package Jasper as seguintes classes . RelatorioAunoDataSource


package jasper; import java.util.Iterator; import java.util.List; import import import import import net.sf.jasperreports.engine.JRDataSource; net.sf.jasperreports.engine.JRException; net.sf.jasperreports.engine.JRField; net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; vo.Aluno;

/** * ESSA CLASSE POSSUI DOIS METODOS OBRIGATORIOS NEXT() E FIELD VALUE * @author RJFurutani * @03/05/2005 */ public class RelatorioAlunosDataSource implements JRDataSource { private Iterator itrAlunos; private Iterator itrLicenca; private Object valorAtual; private int i = 0; private boolean irParaProximoAluno = true; /** * CONSTRUTOR DA CLASSE * @param campos * @param itr */ public RelatorioAlunosDataSource(List lista) { super();// indica que ser utilizado o construtor da classe pai this.itrAlunos = lista.iterator(); } /* * (non-Javadoc) * * @see net.sf.jasperreports.engine.JRDataSource#next() */ public boolean next() throws JRException { valorAtual = itrAlunos.hasNext() ? itrAlunos.next() : null;

irParaProximoAluno = (valorAtual != null); return irParaProximoAluno; } /* * (non-Javadoc) * * @see net.sf.jasperreports.engine.JRDataSource#getFieldValue(net.sf.jasperreports.engine .JRField) */ public Object getFieldValue(JRField campo) throws JRException { Object valor = null; Aluno aluno = (Aluno) valorAtual; if ("nome".equals(campo.getName())) { valor = aluno.getNome(); } else if ("ListaDisciplinas".equals(campo.getName())) { valor = new JRBeanCollectionDataSource(aluno.getDisciplinas()); } else if ("curso".equals(campo.getName())) { valor = aluno.getCurso(); } return valor; } }

GerarRelatrio - Essa classe ser a main .

package jasper; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import import import import net.sf.jasperreports.engine.JasperFillManager; net.sf.jasperreports.engine.JasperManager; net.sf.jasperreports.engine.JasperPrint; net.sf.jasperreports.view.JasperViewer;

public class GerarRelatorio { private static final String rel1 = "RelAlunos.jasper"; // caminho do Relatorio private static final String rel2 = "jasper/RelAlunosDisciplinas.jasper";// caminho do relatorio /** * CONSTRUTOR SER RESPONSAVEL POR MONTAR O RELATORIO * @throws Exception */ public GerarRelatorio() throws Exception { // Lista dos alunos ArrayList listaAlunos = GerarDadosFicticios.getListaAlunos(); // Cria o data source para o relatrio RelatorioAlunosDataSource ds = new RelatorioAlunosDataSource( listaAlunos); // Parametros do relatorio Map<String, String> parametros = new HashMap<String, String>(); parametros.put("pathSubRel",rel2); JasperPrint impressao = JasperFillManager.fillReport(getClass() .getResourceAsStream(rel1), parametros, ds);

//exibe o relatrio //JasperViewer viewer = new JasperViewer(impressao, true); // viewer.show(); // Grava o relatrio em disco em pdfasper //JasperManager.printReportToPdfFile(impressao, caminho+nome+data+".pdf"); JasperManager.printReportToPdfFile(impressao, "c://teste.pdf"); } public static void main(String[] args) throws Exception { new GerarRelatorio(); } }

GerarDadosFictcios
package jasper; import java.util.ArrayList; import vo.Aluno; import vo.Disciplina; /** * @author RJFurutani * @04/05/2005 */ public class GerarDadosFicticios { public static ArrayList getListaAlunos() { ArrayList listaAlunos = new ArrayList(); ArrayList disciplinas = null; Disciplina disciplina1 = null; Disciplina disciplina2 = null; Disciplina disciplina3 = null; Disciplina disciplina4 = null; /* * Aluno Roberto */ disciplina1 = new Disciplina("Banco de Dados I", "45Hs"); disciplina2 = new Disciplina("Equaes Diferenciais I", "50Hs"); disciplina3 = new Disciplina("Algoritmos e Estrutura de Dados I", "60Hs"); disciplina4 = new Disciplina("Inteligencia Artificial I", "60Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); disciplinas.add(disciplina4); Aluno roberto = new Aluno("Roberto Furutani", "Ciencia da Computacao", disciplinas); listaAlunos.add(roberto); /* * Aluna Fernanda */ disciplina1 = new Disciplina("Biologia", "45Hs"); disciplina2 = new Disciplina("Matematica Elementar II", "30Hs"); disciplina3 = new Disciplina("Instrumentao Cirurgica", "70Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2);

disciplinas.add(disciplina3); Aluno fernanda = new Aluno("Fernanda Fernandes", "Enfermagem", disciplinas); listaAlunos.add(fernanda); /* * Aluna Silvia */ disciplina1 = new Disciplina("Fisica", "45Hs"); disciplina4 = new Disciplina("Quimica", "45Hs"); disciplina2 = new Disciplina("Equaes Diferenciais II", "50Hs"); disciplina3 = new Disciplina("Ingls", "60Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); disciplinas.add(disciplina4); Aluno silvia = new Aluno("Silvia da Silva", "Matemtica", disciplinas); listaAlunos.add(silvia); /* * Aluno Andr */ disciplina1 = new Disciplina("Banco de Dados II", "65Hs"); disciplina2 = new Disciplina("Calculo Numerico I", "50Hs"); disciplina3 = new Disciplina("Eletronica I", "60Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); Aluno andre = new Aluno("Andr Oliveira Lima", "Engenharia da Computacao", disciplinas); listaAlunos.add(andre); return listaAlunos; } }

Observes Caso deseje que a cada subRelatorio criado aparea o nome e o curso , coloque essas fields na band detail acima do subRelatorio .

REFERENCIAS
Roberto Furutani - http://www.furutani.com.br/2009/02/tutorial-de-jasperreports-usando-arraylist-de-vo/

Você também pode gostar