Вы находитесь на странице: 1из 15

TUTORIAL SUBREPORT IREPORT

A . Criar o Relatório

1. Abra um novo Relatório

A . Criar o Relatório 1. Abra um novo Relatório 1.1 Arquivo > New 1 .3
A . Criar o Relatório 1. Abra um novo Relatório 1.1 Arquivo > New 1 .3

1.1 Arquivo > New

1. Abra um novo Relatório 1.1 Arquivo > New 1 .3 Escolha do nome do relatório

1.3 Escolha do nome do relatório

1.2 Escolha o tipo do layout do Relatório

do relatório 1.2 Escolha o tipo do layout do Relatório 1.4 Finalizando 2. Escolha as Bands

1.4 Finalizando

2. Escolha as Bands que será necessária para montar o Relatório.

Nesse exemplo trabalharemos com as bands Title , Column Header e Detail .

Repare que a Band Column Footer .
Repare que a Band
Column Footer
.
Repare que a Band Column Footer . Excluindo a Column Footer 2.1 Excluindo Band. 2.2 Band

Excluindo a Column Footer

2.1 Excluindo Band.

2.2 Band Excluída.

Exclua todas as outra Bands que não será necessárias ( Title, Page Header , Column Footer , Page Footer e Summary).

3. Inserindo os Fields

Será adicionado as seguintes Fields :

nomeInserindo os Fields Será adicionado as seguintes Fields : curso ListaDisciplinas OBS IMPORTANTE : No Field

cursoos Fields Será adicionado as seguintes Fields : nome ListaDisciplinas OBS IMPORTANTE : No Field Class

ListaDisciplinas OBS IMPORTANTE :

No Field Class do Field ListaDisciplinas tem que ser um Object

Field Class do Field ListaDisciplinas tem que ser um Object 3.1 Adicionando um Field. OBS IMPORTANTE

3.1 Adicionando um Field.

OBS IMPORTANTE : ,

ser um Object 3.1 Adicionando um Field. OBS IMPORTANTE : , 3.2 Editando Field No campo

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

, 3.2 Editando Field No campo name, digite o nome da Field. 3.3 Todas as Fields

3.3

Todas as Fields adicionadas.

No Field Class do Field ListaDisciplinas tem que ser um Object

Field Class do Field ListaDisciplinas tem que ser um Object 4 . Montando o Relatório Adicione

4 . Montando o Relatório

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.Field Class do Field ListaDisciplinas tem que ser um Object 4 . Montando o Relatório Adicione

4.3 clique em OK Crie um titulo para Relatório Clique em paleta e procure o

4.3 clique em OK

Crie um titulo para Relatório

4.3 clique em OK Crie um titulo para Relatório Clique em paleta e procure o Text

Clique em paleta e procure o Text static arraste ele até a área desejada (Column Header ) e digite o titulo do relatório.

Text Static Field
Text Static
Field

4.2 Imagem de como terá que ficar .

B . MONTANDO O SUBRELATORIO

1. Clique no ícone Subrelatorio

. MONTANDO O SUBRELATORIO 1. Clique no ícone Subrelatorio 1.2 ícone do SubRelatorio. 2. Abrira uma

1.2 ícone do SubRelatorio.

2. Abrira uma janela com o Assistente do SubReport.

2. Abrira uma janela com o Assistente do SubReport. 2.1 Escolha a opão Create new report
2. Abrira uma janela com o Assistente do SubReport. 2.1 Escolha a opão Create new report
2.3 Mantenha a opção Default . 2.4 Mantenha a opção Default . 2.5 Mantenha a
2.3 Mantenha a opção Default . 2.4 Mantenha a opção Default . 2.5 Mantenha a

2.3 Mantenha a opção Default .

2.3 Mantenha a opção Default . 2.4 Mantenha a opção Default . 2.5 Mantenha a opção

2.4 Mantenha a opção Default .

a opção Default . 2.4 Mantenha a opção Default . 2.5 Mantenha a opção Default .

2.5 Mantenha a opção Default .

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

2.5 Mantenha a opção Default . 2.6 Coloque o nome do arquivo e onde ele ira
2.5 Mantenha a opção Default . 2.6 Coloque o nome do arquivo e onde ele ira
2.5 Mantenha a opção Default . 2.6 Coloque o nome do arquivo e onde ele ira

Clique no Field ListaDisciplina

2.7 . Marque a opção Use JRDataSource Expression . E Finalize.

3. Montando o Subrelatorio

3.1 Delete as bands que não serao necessarias ( Title, Page Header, Column Header, Column Footer , Page Footer e

Summary). Deixe somente a Detail .

3.2 Colocando os Fie lds Necessario .

3.1

nomesomente a Detail . 3.2 Colocando os Fie lds Necessario . 3.1 cargaHoraria Adicione os Fields

cargaHorariaa Detail . 3.2 Colocando os Fie lds Necessario . 3.1 nome Adicione os Fields no

Adicione os Fields no Detail .

. 3.1 nome cargaHoraria Adicione os Fields no Detail . 3.1.1 Os Fields na Band Detail

3.1.1 Os Fields na Band Detail .

3.4

Vá em propriedade

no Detail . 3.1.1 Os Fields na Band Detail . 3.4 Vá em propriedade 3.4.1 Botão

3.4.1 Botão Direito no icone > Propriedades .

3.4. 2 Mude a Language Groovy para java . OBS : FAÇA A MESMA CONFIGURAÇÃO
3.4. 2 Mude a Language Groovy para java . OBS : FAÇA A MESMA CONFIGURAÇÃO

3.4. 2 Mude a Language Groovy para java .

OBS : FAÇA A MESMA CONFIGURAÇÃO 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 botão di reiro para Renomear esse Parametro .

Clique com o botão di reiro para Renomear esse Parametro . 1.1 Alterando o nome do

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

2 Fazendo Configuração .

2 Fazendo Configuração . 2.1 Clique no Subrelatorio e vá em Propriedades . As configurações em
2 Fazendo Configuração . 2.1 Clique no Subrelatorio e vá em Propriedades . As configurações em

2.1 Clique no Subrelatorio e vá em Propriedades .

As configurações em propriedades serão as seguintes

1. SubReport Expression

clique no icone

serão as seguintes 1. SubReport Expression clique no icone . irá abrir uma janela ,apague o

. 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 opção 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á

” . 4. Verifique se no Data Source Expression está , caso não esteja ,clique no

, caso não esteja ,clique no icone

Source Expression está , caso não esteja ,clique no icone . irá abri uma janela ,

. irá abri uma

janela , clique em Fields e procure o ListaDisciplina .

5. Parameters

clique no icone

e procure o ListaDisciplina . 5. Parameters clique no icone . clique em add , em

. clique em add , em seguida abrirá uma janela . no campo SubReport parameter

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

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

. Clique em Fie lds e procure o

ListaDisciplina.

1 2 3 4 5
1
2
3
4
5

D. COMPILANDO

Copile os dois Relatório ( O relatório Principal(RelAlunos) e o SubRelatorio (RelAlunosDisciplina))

Principal(RelAlunos) e o SubRelatorio (RelAlunosDisciplina)) Para copilar clique com o botão direito do nome do

Para copilar clique com o botão direito do nome do Relatório e clique me Compile Report .

direito do nome do Relatório e clique me Compile Report . 1.1 Botão direito 1.2 Compilando

1.1 Botão direito

Relatório e clique me Compile Report . 1.1 Botão direito 1.2 Compilando OBS : NA HORA

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 .

outro jasper. 1.1 no package vo crie as seguintes classes . Aluno Essa classe será responsável

Aluno

Essa classe será responsável pelo preenchimento do relatório 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;

}

}

void setNome(String nome) { this . nome = nome; } } Disciplina Essa classe será responsável

Disciplina Essa classe será responsável pelo preenchimento do subRelatorio.

package vo;

/**

* "vo" significa Value Object

* Esse pacote são 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 .

nome; } } 1.2 Criar no package Jasper as seguintes classes . RelatorioAunoDataSource package jasper; import

RelatorioAunoDataSource

package jasper;

import java.util.Iterator; import java.util.List;

import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; import 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;

}

}

{ valor = aluno.getCurso(); } return valor; } } GerarRelatório - Essa classe será a main

GerarRelatório - Essa classe será a main .

package jasper; import java.util.ArrayList; import java.util.HashMap; import java.util.Map;

import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperManager; import net.sf.jasperreports.engine.JasperPrint; import 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 relatório 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 relatório //JasperViewer viewer = new JasperViewer(impressao, true); // viewer.show(); // Grava o relatório 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();

}

}

args) throws Exception { new GerarRelatorio(); } } GerarDadosFictícios package jasper; import

GerarDadosFictícios

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("Equações 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("Instrumentação 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("Equações Diferenciais II", "50Hs"); disciplina3 = new Disciplina("Inglês", "60Hs"); disciplinas = new ArrayList();

disciplinas.add(disciplina1);

disciplinas.add(disciplina2);

disciplinas.add(disciplina3);

disciplinas.add(disciplina4);

Aluno silvia = new Aluno("Silvia da Silva", "Matemática", 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;

}

}

Observções

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

coloque essas fields na band detail acima do subRelatorio . REFERENCIAS Roberto Furutani -

REFERENCIAS