Tutorial Jasper Ireport

download Tutorial Jasper Ireport

of 39

Transcript of Tutorial Jasper Ireport

Crear un Nuevo Proyecto

Relatrios

comiReport e JasperReport

em Aplicaes Web

com NetBeans 6.8Autor:

Joaquim Jos Hangalo

[email protected], Outubro de 2009SUMrio

3O JasperReports

4O IReport

4Download e Instalao do iReport

5Estrutura de um Relatorio

8Configurao do iReport

8Montagem do relatrio

9Configurao do data source

11Montagem de um relatrio simples com o iReport

11Utilizando assistente

17Editando o relatrio.

18Compilando e pr-visualizando o relatrio no iReport

19Adicionando Parmetros ao Relatrio

20Adicionar o parmetro query

23Chamada do relatrio numa Aplico Web

23Configurando o NetBeans para executar o relatrios

23Configurando as Bibliotecas do JasperReports no NetBeans.

27Adicionando as bibliotecas ao projecto.

27Bibliotecas adicionais.

28Criando servlets para chamar os relatrios

29Servlet que permite gerar um relatrios

32Servlet para chamar um Relatrio com parmetros

36Chamada do servlet para gerar o relatrio com parmetros

36Pagina Simples para passar o parmetro

O JasperReportsO JasperReports um Framework de cdigo fonte aberto, utilizado para gerar relatrios multiplataforma. Escrita em java, essa biblioteca apresenta grande habilidde na orgnizao e apresentao de contedo, permitindo a gerao dinmica de relatrios em diversos formatos, como PDF, HTML, XLS, CSV e XML, podendo ainde ser utilizada em qualquer aplicao Java, incluindo aplicaes desktop, Web e distribudas.Usando XML, o desenvolvedor pode definir textos estticos, imagens, linhas, formas geomtricas, como rectngulos e elipses, e as suas localizaes dentro do relatrio. Quando pronto, esse ficheiro XML deve ser compilado e, ento gerado um ficheiro com a extenso .jasper, contendo a vero compilada do cdigo XML.

O processo de desenvolvimento de um relatrio comea com a codificao da definio do relatrio em XML. Depois criado um arquivo com a extenso .jrxml (o template de relatrio), onde descrita toda a estrutura do relatrio: a posio de textos, imagens e formas geomtricas; a forma de recuperao dos dados necessrios, a forma de fazer clculos e totalizaes, e quais parmetros devem ser passados, entre outras definies.Download do JasperReportsO JasperReport est disponvel na URL http://sourceforge.net/projects/jasperreports/. A sua configurao ser vista mais adiante neste tutorialO IReport

O iReport uma ferramenta visual que desenha ficheiros XML para o JasperReports. um IDE de relatrios WYSIWYG.

Com iReport podemos definir o design do relatrio dentro de um ambiente grfico, contendo recursos necessrios para desenvolver relatrios com os formatos suportados pela biblioteca JasperReports.

Este ambiente oferece muitas ferramentas que aceleram o desenvolvimento do relatrio, desde a conexo com a base de dados at a atalhos para tarefas de compilao e (pr)-visualizao do relatrio, dando a possibilidade de realizar ensaios e testes sobre o layout dos relatrios.

Download e Instalao do iReport

O iReport est disponvel no site http://ireport.sourceforge.net. A sua instalao normal{duplo clique e nexts}.

Estrutura de um Relatorio

Um relatrio composto por vrias seces. Secces so paertes de um relatrio que contm informaes especficas, necessrias para uma boa apresentao. Essas seces podem conter imagens, textos, formas geomtricas, ect. Na terminologia do JasperReports, as secces so chamadas de Bands. Num documento, existem seces com propsictos especficos, onde cada um ercerce um papel na gerao do relatrio. A seguir so apresentadas as principais secces existentes para a gerao de relatrios.Seces

Title

O contedo desta seco aparece apenas uma vez no incio do relatrio. Ex.: Contactos Telefnicos

Page Header

O contedo desta seco aparece no incio de cada pgina. Neste local pode-se colocar a data e hora e/ou o nome ou informaes da empresa.

Column Header

O contedo colocado nesta seco aparece apenas no comeo de cada coluna. Se o relatrio tem uma s coluna definida, ento so ignoradas as seces cabealhos e rodaps de coluna. Como exemplo, nesta seco podemos ter a lista dos campos escolhidos como : Nome do cliente, Telefone, E-mail.Detail

O contedo desta seco se repete enquanto houver linhas para serem colocadas no relatrio de acordo com o que existe na base de dados e os parmetros passados.Column Footer

Esta seco aparece abaixo de cada coluna. Vale o mesmo comentrio da secco Column Header.

Page Footer

Esta seco aparece apenas no fim de cada pgina. Nesta parte podemos ter informaes como o nmero da pgina ou o total de paginas encontradas: 1/7.Last Page Footer

Esta secco substitui o rodap da pgina regular na ltima pgina do relatrio.

Summary

Esta secco s parece uma vez no trmino do relatrio. Por exemplo, aps ter listado todos os cadastros de clientes no detalhes (detail), pode-se querer expor algum detalhe num grfico para melhorar a comparao visual.

Janela de apresentao do iReport 3.6.1

Configurao do iReport

As opes principais de configurao do iReoprt esto disponveis no menu Tools

Montagem do relatrioO sistema de gesto de bases de dados utilizado neste tutorial o Mysql.

Antes de criar o relatorio master ou relatrio principal, necessrio configurar um data source (fonte de dados).

Configurao do data source

Na barra de ferramentas faa clique no boto Report Datasource

2. Na caixa de dilogo que se abre fazer clique em new e escolher o Data Source Type {tipo de origem de dados}. No nosso caso, escolher Database JDBC connection.

e fazer clique em next.

3. Na Caixa de dilogo que se abre configurar as propriedades conforme as configuraes e parmetros da base de dados

a seguir faa clique em Test. Se o teste for bem sucedido ter a seguinte mensagem

ento clique em Save e feche a janela.

Na janela seguinte marque a check box ao lado do nome do Data Source definido para que fique configurada com a conexo activa. E feche a caixa de DilogoMontagem de um relatrio simples com o iReportPodemos montar relatrios com o iReport, essencialmente de duas maneiras: Utilizando o assistente e criar um relatrio personalizado.

Utilizando assistente

1. Aceder ao menu File e escolher New e na janela New File escolher um modelo e fazer clique em Lauch Report Wizard

na caixa de dilogo a seguir indicar o local onde pretende guardar o relatrio.

Num projecto Web, crie uma subpasta debaixo da pasta WEB-INF. Por exemplo uma subpasta chamada relatrios.Na estrutura do projecto web

Existiro, entre outros, os seguintes subdirectrios:

relatorios para os ficheiros .jrxml e jasper que o irreport gera ao guardar e compilar o relatorio

Source Packages para as classes Java;

Web Pages para os arquivos .jsp;

Web Pages /WEB-INF para o ficheiro web.xml;

Libraries para os ficheiros JAR necessrios para o projecto funcionar;

continuando

e clique em next para prosseguir

na etapa Query, na seco Connections/Data Sources, escolher a conexo.

e clique em next para prosseguir.

E para fazer a consulta que fornecer os dados para o relatrio, na caixa de dilogo que aparece a seguir, faa clique sobre o boto Design query

2. Clique em Design query

na janela que aparece faa duplo clique sobre a tabela(s), a partir da(s) qual(ais) pretende criar o relatrio.

3. Na tabela seleccionada,

Marque os campos que pretende ver(visualizar no relatorio). E clique em OK.A seguir clique em Next para processguir4. Na janela que aparece

seleccione os campos que pretende no relatrio. Pode-se passar um-por-um fazendo clique na seta > ou todos de uma vez, fazendo clique nas setas duplas >>.

A seguir faa clique em Next.

Na janela que se segue, esto disponveis as opes de agrupamento

para o exemplo actual. No necessrio escolher nenhuma opo de agrupamento. Faa clique em Next e ver a seguinte mensagem. Faa clique em Finish

O relatrio base est pronto.

Editando o relatrio.

Trabalhando com o exemplo actual.

Um pequeno cuidado deve-se ter em conta. Os campos que aparecem precedidos de um cifro {$F}, apontam para campos da tabela da base de dados. No devem ser mexidos.

Os outros so textos estticos. Podem e devem ser editados. Para tal basta fazer duplo clique sobre o item a editar ou seleccionar o item e depois primir a tecla F2. Com O iReport possvel aplicar variadssimas formataes ao relatrio.

Compilando e pr-visualizando o relatrio no iReportFeitas as necessrias formataes e guardado o relatrio, na barra de ferramentas do relatrio faa clique no boto Compile Report, para compilar

..e depois sobre o boto Preview, para pr-visualizar o relatrio.

Pr-visualizao do relatrio

ao mesmo tempo o iReport 3.6.1 compila o relatrio e cria dois ficheiros, no local onde est guardado o relatrio. Um com a extanso .jasper e ou com a extenso .jrxml. Estes dois ficheiros so importantes para a visualizao do relatrio na aplicao. Os dois devem estar na pasta da aplicao de onde vo ser chamados os relatrios.Adicionando Parmetros ao Relatrio

Antes de construirmos o aplicativo para chamar o relatrio, vamos ver os procedimentos para criar um parmetro que permitir, por exemplo mostrar os dados de um determinado Funcionrio, ou, por exemplo, de uma determinada Factura.Vamos criar um relatrio que envolva um campo de identificao unvoca e depois de todas as formataes e configuraes

No Report Inspector faa clique com o boto direito no mouse sobre Parameters e escolha Add Parameter

e na caixa Properties escreva o nome do parmetro, na seco Name, escolha o tipo de dado na seco Parameter Class.

No exemplo mostrado temos uma parmetro chamado codigoFuncionario, do tipo Integer.

Como vamos precisar de testar o relatrio, seleccione o item Use as a Prompt. Isso far com que um promt aparea para que possamos escrever o paramentro solicitado, para teste.Existe tambm o campo Default Value Expression. a opo padro para o valor do prompt.Adicionar o parmetro query

Para que o parmetro venha a ter efeito necessrio adiciona-lo query. Para tal, na barra de ferramentas clique no boto Report Query e a seguir clique no boto Query Designer.Na caixa de dilogo SQL Query Designer, no quadro direita, na tabela com o campo que deseja como condio, clique com o boto direito do mouse e no menu de contexto, seleccione o item add where condition.

Ao surgir a caixa de dilogo condition.edit, a parte superior estar preenchida com o campo escolhido. Resta apenas manter a condio de igualdade e escrever na parte inferior o parmetro criado. O formato completo do parmetro ser $P{codigoFuncionario}, por exemplo. A caixa de dilogo preenchida ser parecida com a seguinte.

Aps a confirmao, na construo da query, a condio WHERE aparecer contendo a comparao do campo escolhido com o parmetro passado.

No caso em construo ao voltar caixa de dilogo Report query termos a instruo SQL com a condio WHERE contendo o codigoFuncionario comparado com o parmtro $P{codigoFuncionario}.Executando o relatrio. Antes de mostrar o relatrio, o IReport mostra um promt chamado Parameter prompt.

O campo pode vir j preenchido com um valor padro, esperando que se escreva um novo valor. A baixo aparece o tipo aceite e a descrio, caso se tenha feito, do parmetro. Mesmo que se apague o parmetro padro, se for preciso testar o relatrio com este nmero, basta fazer clique no boto Use default.

Chamada do relatrio numa Aplico WebPr-Requisitos

Conhecimentos de Servlets e JSP.

Configurando o NetBeans para executar o relatriosPara se poder visualizar o relatorio criado necessrio adicionar algumas bibliotecas do JasperReports. Por segurana adicionaremos todas as que comeam por common (common collections por exemplo) mais a biblioteca iText. O ltimo passo ser implementar a classe que gera o relatrio.Depois se ter feito o download da verso mais recente das bibliotecas do JasperReport, deve descomprimir o package baixado e no directrio lib seleccionar os seguintes .jar. De preferncia, bom coloca-los numa pasta com um nome sugestivo.commons-beanutils-1.8.0.jar

commons-collections-2.1.1.jar

commons-digester-1.7.jar

commons-javaflow-20060411.jar

commons-logging-1.0.4.jar

iText-2.1.0.jar

jasperreports-javaflow-3.6.1.jar

jasperreports-3.6.1.jar

jasperreports-fonts-3.6.1.jar

Configurando as Bibliotecas do JasperReports no NetBeans.

Para configurar o JasperReports/Ireport e ento utili-lo na aplicao, os passos so os seguintes.

Aceda ao menu Tools e clique em Libraries

2. Na caixa de dilogo Library Manager, clique em New Library...

3. E na caixa de dilogo New Library na seco Library Name:, escrever JasperReports (se desejar colocar a verso bastante sugestivo) e em Library Type: escolha Class Libraries. Clique no boto OK para confirmar.

4. De volta, na caixa de dilogo Library Manager, clique no boto Add JAR/Folder e adicionar os ficheiros .jar do JasperReport, referidos anteriormente e confirmar.

Finalmente os ficheiros configurados estaro disponveis no campo Library Classpath da aba Classpath.

Adicionando as bibliotecas ao projecto.

Na janela Projects, clique com o boto direito do mouse sobre Libraries, com o projecto expandido, seleccione Add Library no menu de contexto. Na caixa de dilogo Add Library, seleccione a livraria JasperReport (criada anteriormente). Confirme clicando no boto Add Library.Ainda pode fazer clique com o boto direito o mouse sobre o projecto e escolher a opo properties.

nesta caixa de dilogo seleccione a categoria Libraries e na seco Cimple faa clique sobre o boto Add LibraryBibliotecas adicionais.

Alm da livraria do JasperReport adicone tambm as livrarias Spring Framework 2.5 e Groovy 1.5.5. Estas livrarias j vem incorporadas no NetBeans. Basta adiciona-las ao projecto

Criando servlets para chamar os relatriosPara criar um servlet, clique com o boto direito do mouse sobre o modulo Web do projecto e seleccione o item New e clique em Servlet. Escreva RelatorioSemParametros. Na seco Package escrever relatrios

clique em next, para prosseguir.

deixe marcada a opo Add information to deployment descriptor(Web.xml). Clique no boto Finish para completar.

Adicione ao servlet o cdigo mostrado a seguir e guarde as alteraes.

Servlet que permite gerar um relatrios sem parmetros

ppublic class RelatorioSemParametros extends HttpServlet

{

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException, Exception

{

Connection conn = null;

conn = Conexao.getConnection();

// gera o relatrio

ServletContext context = getServletContext();

byte[] bytes = null;

try

{

// carrega os arquivos jasper

JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(

context.getRealPath("/WEB-INF/relatorios/ListaFuncionarios.jasper"));

// parmetros, se houver

Map parametros = new HashMap();

// direciona a sada do relatrio para um stream

bytes = JasperRunManager.runReportToPdf(relatorioJasper, parametros, conn);

if (bytes != null && bytes.length > 0)

{

// envia o relatrio em formato PDF para o browser

response.setContentType("application/pdf");

response.setContentLength(bytes.length);

ServletOutputStream ouputStream = response.getOutputStream();

ouputStream.write(bytes, 0, bytes.length);

ouputStream.flush();

ouputStream.close();

}

} catch (JRException jre)

{

System.err.println("Errrrrrrrrrrroooooooooooooooooooo" + jre);

}

}

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

try

{

processRequest(request, response);

} catch (Exception ex)

{

Logger.getLogger(RelatorioSemParametros.class.getName()).log(Level.SEVERE, null, ex);

}

}

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

try

{

processRequest(request, response);

} catch (Exception ex)

{

Logger.getLogger(RelatorioSemParametros.class.getName()).log(Level.SEVERE, null, ex);

}

}

@Override

public String getServletInfo()

{

return "Short description";

}

}

Para os imports dos objectos encontrados, utilizar o atalho CTRL+SHIFT+I (Fix All Imports).

Pagina JSP que chamar o relatrio

Pagina Simples para chamar o servlet e mostrar o relatrio

Visuzalizao do Relatorio!

Relatorio Sem Parmentos

Trabalhando com parmetros no relatrios.

O primeiro exemplo demonstra apenas a chamada ao relatrio criado, sem transmitir parmetros. No segundo exemplo sero adicionados parmetros ao relatrio.

Os parmetros so passados durante o processo de criao do relatrio. Ver seco Adicionando Parmetros ao Relatrio

.

Servlet para chamar um Relatrio com parmetrosNesta parte ser apresentado um exemplo de cdigo de servlet que construi um relatrio em funo do parmetro passado.Para comear. Crie um novo servlet com o nome RelatorioComParametros e adicione a ele o cdigo seguinte.

Relatrio com parmetro 1. Exemplo de cdigo

public class RelatorioComParametros extends HttpServlet {

/**

* Processes requests for both HTTP GET and POST methods.

* @param request servlet request

* @param response servlet response

* @throws ServletException if a servlet-specific error occurs

* @throws IOException if an I/O error occurs

*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException, Exception

{

Connection conn = null;

conn = Conexao.getConnection();

// gera o relatrio

ServletContext context = getServletContext();

byte[] bytes = null;

try {

// carrega os arquivos jasper

JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(

context.getRealPath("/WEB-INF/relatorios/listaDadosFuncionario.jasper"));

// parmetros, se houverem

Map parametros = new HashMap();

// recebo o valor do formulario e converte-o para inteiro

parametros.put("codigoFuncionario", Integer.parseInt(request.getParameter("codigoFuncionario")));

// direcciona a sada do relatrio para um stream

bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conn);

System.out.println("Certo");

if (bytes != null && bytes.length > 0) {

// envia o relatrio no formato PDF para o browser

response.setContentType("application/pdf");

response.setContentLength(bytes.length);

ServletOutputStream ouputStream = response.getOutputStream();

ouputStream.write(bytes, 0, bytes.length);

ouputStream.flush();

ouputStream.close();

}

}

catch(JRException jre)

{

System.err.println("Erro"+jre);

}

}

//

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

try

{

processRequest(request, response);

} catch (Exception ex)

{

Logger.getLogger(Relatorio02.class.getName()).log(Level.SEVERE, null, ex);

}

}

/**

* Handles the HTTP POST method.

* @param request servlet request

* @param response servlet response

* @throws ServletException if a servlet-specific error occurs

* @throws IOException if an I/O error occurs

*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

try

{

processRequest(request, response);

} catch (Exception ex)

{

Logger.getLogger(Relatorio02.class.getName()).log(Level.SEVERE, null, ex);

}

}

/**

* Returns a short description of the servlet.

* @return a String containing servlet description

*/

@Override

public String getServletInfo() {

return "Short description";

}//

}

O parmetro passado um java.util.HashMap, que define se haver um ou mais parmetros. O parmetro criado no relatrio tem um nome, e este que deve ser utilizado neste HashMap: cdigo (referindo-se a $P{codigoFuncionario}. Como se trata de uma chave do tipo String e de um valor numrico inteiro, graas ao mtodo put(Key, Value), o exemplo capturar o campo chave de cada funcionrios e transmitir ao parmetro, da seguinte forma: parametros.put("codigoFuncionario", Integer.parseInt(request.getParameter("codigoFuncionario")));

Chamada do servlet para gerar o relatrio com parmetrosCrie uma paginas Jsp e adicione um formulrio (form).Dentro do form adicione uma inpuText com o name codigoFuncionario, ou conforme o caso.

Adicione ainda um boto do tipo submit

Defina como POST o method do form e no action passe o nome do servlet que receber o parmetro. No caso do exemplo RelatorioComParametros

Pagina Simples para passar o parmetro

Visuzalizao dos Relatorios!


Escreva o cdigo do Funcionario

Bom trabalhoYou should be the change that you want to see in the world"

("Voc deve ser a mudana que quer ver no mundo")Gandhi No dia que terminei a primeira verso destes apontamentos apareceu j disponibilizada a verso 3.6.2. Tem muitas semelhanas com esta verso.

Essa estrutura importante, sob pena de surgirem muitas dificuldades para visualizar os relatrios

Este nome ser importante para o servlet chamar correctamente o relatrio

PAGE 30