You are on page 1of 15

TUTORIAL SUBREPORT IREPORT A .

Criar o Relatório
1. Abra um novo Relatório

1.1 Arquivo > New

1.2 Escolha o tipo do layout do Relatório

1.3 Escolha do nome do relatório

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 .

digite o nome da Field.3 Todas as Fields adicionadas.1 Excluindo Band.2 Editando Field No campo name. 3.Excluindo a Column Footer Repare que a Band Column Footer desapareceu. 3. Exclua todas as outra Bands que não será necessárias (Title. 2. Column Footer .1 Adicionando um Field. No Field Class do Field ListaDisciplinas tem que ser um Object 4 . OBS IMPORTANTE : . Page Header . 2. . 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. Ao terminar de inserir aparecerá uma janela de um ok. . 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). Page Footer e Summary).2 Band Excluída. 3.

2 Imagem de como terá que ficar .4.2 ícone do SubRelatorio. .1 Escolha a opão Create new report . MONTANDO O SUBRELATORIO 1. Abrira uma janela com o Assistente do SubReport.2 Escoha o layout . caso já possua escolha a opção Use an existing report.3 clique em OK Crie um titulo para Relatório Clique em paleta e procure o Text static arraste ele até a área desejada (Column Header ) e digite o titulo do relatório. Clique no ícone Subrelatorio 1. 2. 2. B . Text Static Field 4. pois não temos nenhum outro subReport criado . 2.

2.5 Mantenha a opção Default .2.6 Coloque o nome do arquivo e onde ele ira ficar salvo Clique no Field ListaDisciplina . 2.4 Mantenha a opção Default .3 Mantenha a opção Default . 2.

3.1 Botão Direito no icone > Propriedades . nome cargaHoraria 3. . Column Footer . Marque a opção Use JRDataSource Expression . 3.1 Os Fields na Band Detail .2 Colocando os Fields Necessario .1 Adicione os Fields no Detail . 3.1 Delete as bands que não serao necessarias ( Title.4 Vá em propriedade 3.1. E Finalize.4. Column Header.7 .2. 3. Page Footer e Summary). Page Header. Deixe somente a Detail . Montando o Subrelatorio 3.

1 Alterando o nome do Parametro que faz a conexão entre o Relatorio e o SubRelatorio . Repare que doi criado um Parametro chamado “SUBREPORT_DIR” .3.4. Clique com o botão direiro para Renomear esse Parametro . C. OBS : FAÇA A MESMA CONFIGURAÇÃO NO RELATORIO PRINCIPAL TAMBEM . Volte para o RelAluno ( Relatorio Principal ) . .vá em Parametros . 2 Mude a Language Groovy para java . 1. 1. CONFIGURANDO O SUBRELATORIO .

em seguida clique em Parameters e procuro o parametro criado no item acima (pathsubRel). 2. clique em Fields e procure o ListaDisciplina . Clique em Fields e procure o . caso não esteja . .apague o que está escrito . 2. As configurações em propriedades serão as seguintes 1. e em value Expression clique no icone ListaDisciplina. Verifique se no Data Source Expression está janela . Connection type Selecione o “Use a datasource expression” .lang.1 Clique no Subrelatorio e vá em Propriedades . Parameters clique no icone . 4. Verifique se a opção Expression Class está selecionado com java. clique em add . 5. em seguida abrirá uma janela . no campo SubReport parameter . irá abri uma name digite o nome do seu parametro .clique no icone . SubReport Expression clique no icone . irá abrir uma janela .2 Fazendo Configuração . 3.String e se o using Cache está selecionado .

1 2 3 4 5 .

// indica que será utilizado o construtor da classe pai this.util. COMPILANDO Copile os dois Relatório ( O relatório Principal(RelAlunos) e o SubRelatorio (RelAlunosDisciplina)) Para copilar clique com o botão direito do nome do Relatório e clique me Compile Report . E. } /** * @param curso The curso to set. private String curso. package vo. 1. /** * CLASSE RESPONSAVEL POR PREENCHER O RELATORIO PRINCIPAL * @author RJFurutani * @04/05/2005 */ public class Aluno implements Serializable{ private String nome.curso = curso. ArrayList disciplinas) { super().Serializable. SALVE NA PASTA QUE VOCÊ CRIARÁ A SUA MAIN PARA GERAR O RELATORIO .D. DESENVOLVIMENTO DA CLASSE JAVA 1. String curso.nome = nome.1 no package vo crie as seguintes classes .1 Botão direito 1. Aluno Essa classe será responsável pelo preenchimento do relatório principal . this. import java. } /** * GETTER AND SETTERS * @return */ public String getCurso() { return curso.io. private ArrayList disciplinas. /** * CONSTRUTOR * @param nome * @param curso * @param disciplinas */ public Aluno(String nome. 1. import java. NO CASO DESSE EXEMPLO SERÁ NA PASTA JASPER . */ public void setCurso(String curso) { . Crie dois packages um chamado vo e outro jasper. this.disciplinas = disciplinas.ArrayList.2 Compilando OBS : NA HORA DE SALVAR OS DOIS RELATORIOS .

String cargaHoraria) { super().nome = nome. } } Disciplina Essa classe será responsável pelo preenchimento do subRelatorio.disciplinas = disciplinas. /** * @author RJFurutani * @04/05/2005 * Classe responsavel por preencher o subRelatorio */ public class Disciplina implements Serializable{ private String nome. } public void setCargaHoraria(String cargaHoraria) { this. } /** * @param disciplinas The disciplinas to set. } /** * @return Returns the disciplinas. /** * CONSTRUTOR DA CLASSE * @param nome * @param cargaHoraria */ public Disciplina(String nome. */ public String getNome() { return nome.Serializable. // indica que será utilizado o construtor da classe pai this. } /** * @return Returns the nome.this. /** * "vo" significa Value Object * Esse pacote são criados os Value Object */ import java. package vo. */ public void setDisciplinas(ArrayList disciplinas) { this.io.nome = nome. } /** * GETTERS AND SETTERS * @return */ public String getCargaHoraria() { return cargaHoraria.cargaHoraria = cargaHoraria. } /** * @param nome The nome to set.curso = curso. private String cargaHoraria. */ public void setNome(String nome) { this.cargaHoraria = cargaHoraria. . */ public ArrayList getDisciplinas() { return disciplinas. this.

JRDataSource.engine. import java.} public String getNome() { return nome.jasperreports. RelatorioAunoDataSource package jasper. net.engine.Iterator.itrAlunos = lista.engine. private Object valorAtual. net.Aluno.JRBeanCollectionDataSource. private int i = 0.JRException. import import import import import net. /** * CONSTRUTOR DA CLASSE * @param campos * @param itr */ public RelatorioAlunosDataSource(List lista) { super().jasperreports.hasNext() ? itrAlunos.// indica que será utilizado o construtor da classe pai this.util.sf. } public void setNome(String nome) { this.iterator().2 Criar no package Jasper as seguintes classes . net.nome = nome.engine.sf. private boolean irParaProximoAluno = true.jasperreports. vo. } /* * (non-Javadoc) * * @see net.util.engine. private Iterator itrLicenca.sf. import java.jasperreports.JRDataSource#next() */ public boolean next() throws JRException { valorAtual = itrAlunos.sf.List.jasperreports.next() : null.sf. } } 1. . /** * ESSA CLASSE POSSUI DOIS METODOS OBRIGATORIOS NEXT() E FIELD VALUE * @author RJFurutani * @03/05/2005 */ public class RelatorioAlunosDataSource implements JRDataSource { private Iterator itrAlunos.JRField.data.

jasperreports.engine.JRDataSource#getFieldValue(net.jasperreports. net.engine.equals(campo.equals(campo.getResourceAsStream(rel1).getDisciplinas()).HashMap. import java.jasperreports. package jasper.fillReport(getClass() .getName())) { valor = new JRBeanCollectionDataSource(aluno. net. // caminho do Relatorio private static final String rel2 = "jasper/RelAlunosDisciplinas. } else if ("curso".irParaProximoAluno = (valorAtual != null). // Parametros do relatorio Map<String.jasperreports.sf.jasperreports.util.engine. Aluno aluno = (Aluno) valorAtual. parametros. return irParaProximoAluno.view.sf. net. } return valor.JasperPrint.JasperViewer. import java.rel2).getCurso().util. JasperPrint impressao = JasperFillManager. String>().JasperManager.JasperFillManager.Map. // Cria o data source para o relatório RelatorioAlunosDataSource ds = new RelatorioAlunosDataSource( listaAlunos).util.jasperreports.sf. ds).engine . } else if ("ListaDisciplinas".getName())) { valor = aluno.jasper".ArrayList.jasper".// caminho do relatorio /** * CONSTRUTOR SERÁ RESPONSAVEL POR MONTAR O RELATORIO * @throws Exception */ public GerarRelatorio() throws Exception { // Lista dos alunos ArrayList listaAlunos = GerarDadosFicticios. if ("nome". String> parametros = new HashMap<String. import java.equals(campo. } /* * (non-Javadoc) * * @see net.sf. public class GerarRelatorio { private static final String rel1 = "RelAlunos. } } GerarRelatório .sf.JRField) */ public Object getFieldValue(JRField campo) throws JRException { Object valor = null. .sf.getName())) { valor = aluno.put("pathSubRel".getNome().getListaAlunos().engine. import import import import net. parametros.Essa classe será a main .

//exibe o relatório //JasperViewer viewer = new JasperViewer(impressao. disciplinas. import vo. Disciplina disciplina2 = null. } public static void main(String[] args) throws Exception { new GerarRelatorio(). caminho+nome+data+".add(disciplina4). "45Hs"). /* * Aluna Fernanda */ disciplina1 = new Disciplina("Biologia". "30Hs"). /* * Aluno Roberto */ disciplina1 = new Disciplina("Banco de Dados I". } } GerarDadosFictícios package jasper.add(disciplina2). "c://teste. disciplinas = new ArrayList(). "50Hs"). disciplina3 = new Disciplina("Algoritmos e Estrutura de Dados I". true). disciplinas. Disciplina disciplina3 = null.ArrayList. // viewer. disciplina2 = new Disciplina("Matematica Elementar II". "60Hs"). disciplina3 = new Disciplina("Instrumentação Cirurgica". Disciplina disciplina4 = null.show(). disciplinas. disciplina2 = new Disciplina("Equações Diferenciais I".Disciplina.pdf"). disciplinas. listaAlunos. Disciplina disciplina1 = null. Aluno roberto = new Aluno("Roberto Furutani". import java. . import vo.util.add(disciplina1).add(disciplina3).printReportToPdfFile(impressao. ArrayList disciplinas = null. "60Hs"). JasperManager. "70Hs").add(disciplina1).pdf"). // Grava o relatório em disco em pdfasper //JasperManager. disciplinas). disciplinas.Aluno. /** * @author RJFurutani * @04/05/2005 */ public class GerarDadosFicticios { public static ArrayList getListaAlunos() { ArrayList listaAlunos = new ArrayList().add(disciplina2). disciplinas = new ArrayList(). "Ciencia da Computacao". disciplina4 = new Disciplina("Inteligencia Artificial I". disciplinas.printReportToPdfFile(impressao. "45Hs").add(roberto).

disciplinas).disciplinas. listaAlunos. Aluno silvia = new Aluno("Silvia da Silva".add(disciplina3). listaAlunos. disciplinas. disciplina3 = new Disciplina("Eletronica I". disciplinas.add(disciplina1).add(fernanda). /* * Aluno André */ disciplina1 = new Disciplina("Banco de Dados II". "Enfermagem". return listaAlunos.add(disciplina4). Aluno fernanda = new Aluno("Fernanda Fernandes".add(andre). "50Hs").add(disciplina3). disciplinas. disciplinas. disciplinas = new ArrayList(). disciplina3 = new Disciplina("Inglês".add(disciplina2). disciplinas.add(disciplina1).add(disciplina2). disciplina4 = new Disciplina("Quimica". "65Hs"). "45Hs"). "60Hs"). } } . disciplinas). listaAlunos. disciplinas = new ArrayList(). disciplinas).add(silvia). /* * Aluna Silvia */ disciplina1 = new Disciplina("Fisica". disciplinas. "50Hs"). "45Hs"). Aluno andre = new Aluno("André Oliveira Lima". disciplina2 = new Disciplina("Calculo Numerico I". "Matemática". "60Hs"). "Engenharia da Computacao".add(disciplina3). disciplinas. disciplina2 = new Disciplina("Equações Diferenciais II".

http://www. REFERENCIAS Roberto Furutani .br/2009/02/tutorial-de-jasperreports-usando-arraylist-de-vo/ .Observções Caso deseje que a cada subRelatorio criado apareça o nome e o curso .com.furutani. coloque essas fields na band detail acima do subRelatorio .