Você está na página 1de 39

Relatrios com

iReport e JasperReport
em Aplicaes Web com NetBeans 6.8
Autor: Joaquim Jos Hangalo
joajoshang@gmail.com

Luanda, Outubro de 2009

SUMRIO O JASPERREPORTS.....................................................................................................3 DOWNLOAD DO JASPERREPORTS.........................................................................3 O IREPORT.....................................................................................................................4 DOWNLOAD E INSTALAO DO IREPORT.........................................................4 ESTRUTURA DE UM RELATORIO...........................................................................5 CONFIGURAO DO IREPORT...............................................................................7 MONTAGEM DO RELATRIO..................................................................................8 CONFIGURAO DO DATA SOURCE.....................................................................8 MONTAGEM DE UM RELATRIO SIMPLES COM O IREPORT....................11 UTILIZANDO ASSISTENTE......................................................................................11 EDITANDO O RELATRIO......................................................................................17 COMPILANDO E PR-VISUALIZANDO O RELATRIO NO IREPORT........17 ADICIONANDO PARMETROS AO RELATRIO..............................................19 ADICIONAR O PARMETRO QUERY...............................................................20 CHAMADA DO RELATRIO NUMA APLICO WEB.....................................22 CONFIGURANDO O NETBEANS PARA EXECUTAR O RELATRIOS..........22 CONFIGURANDO AS BIBLIOTECAS DO JASPERREPORTS NO NETBEANS. .........................................................................................................................................23 ADICIONANDO AS BIBLIOTECAS AO PROJECTO...........................................26 BIBLIOTECAS ADICIONAIS....................................................................................27 CRIANDO SERVLETS PARA CHAMAR OS RELATRIOS...............................28
SERVLET QUE PERMITE GERAR UM RELATRIOS SEM PARMETROS.............................................29

SERVLET PARA CHAMAR UM RELATRIO COM PARMETROS..............33 CHAMADA DO SERVLET PARA GERAR O RELATRIO COM PARMETROS.............................................................................................................37 PAGINA SIMPLES PARA PASSAR O PARMETRO...........................................37

O JasperReports
O 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 JasperReports
O JasperReport est disponvel na URL http://sourceforge.net/projects/jasperreports/. A sua configurao ser vista mais adiante neste tutorial

O 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.11

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

No dia que terminei a primeira verso destes apontamentos apareceu j disponibilizada a

Montagem do relatrio
O 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 Dilogo

10

Montagem de um relatrio simples com o iReport


Podemos 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-INF2. 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;


2

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

11

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

12

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,

13

Marque os campos que pretende ver(visualizar no relatorio) . E clique em OK. A seguir clique em Next para processguir 4. 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.

14

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

15

O relatrio base est pronto.

16

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 iReport


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

17

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.

18

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.

19

No exemplo mostrado codigoFuncionario, do tipo Integer.

temos

uma

parmetro

chamado

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.

20

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}3, 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.

Este nome ser importante para o servlet chamar correctamente o relatrio

21

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 Web


Pr-Requisitos Conhecimentos de Servlets e JSP.

Configurando o NetBeans para executar o relatrios


Para 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

22

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

23

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.

24

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.

25

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.

26

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 Library

Bibliotecas 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

27

Criando servlets para chamar os relatrios


Para 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 descriptor(Web.xml). Clique no boto Finish para completar.

deployment

28

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("/WEBINF/relatorios/ListaFuncionarios.jasper")); // parmetros, se houver

29

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)

30

{ Logger.getLogger(RelatorioSemParametros.class.getName()).log(Level.SE VERE, 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.SE VERE, null, ex); } }

@Override public String getServletInfo() { return "Short description"; } }

31

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

<body> <center> <h1>Visuzalizao do Relatorio!</h1>


<a href=" RelatorioSemParametros ">Relatorio Sem Parmentos</a>

</center> </body>

32

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 parmetros


Nesta 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 {

33

/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 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("/WEBINF/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);

34

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); } }

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try {

35

processRequest(request, response); } catch (Exception ex) { Logger.getLogger(Relatorio02.class.getName()).log(Level.SEVERE, null, ex); } } /** * Handles the HTTP <code>POST</code> 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.

36

* @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// </editor-fold>

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 parmetros


Crie 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


37

<body> <center> <h1>Visuzalizao dos Relatorios!</h1> <br> <form method="POST" action=" RelatorioComParametros"> Escreva o cdigo do Funcionario <input type="text" name="codigoFuncionario" value="" /> <input type="submit" value="Mostrar o relatorio" /> </form> </center> </body>

Bom trabalho
38

You should be the change that you want to see in the world" ("Voc deve ser a mudana que quer ver no mundo") Gandhi

39