tutorial jasper ireport

41
Relatórios com iReport e JasperReport em Aplicações Web com NetBeans 6.8 Autor: Joaquim José Hangalo [email protected]

Upload: mauricio-carvalho

Post on 08-Aug-2015

175 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Tutorial Jasper Ireport

Relatórios com

iReport e JasperReportem Aplicações Web

com NetBeans 6.8

Autor:

Joaquim José Hangalo

[email protected]

Luanda, Outubro de 2009

Page 2: Tutorial Jasper Ireport

SUMÁRIO

O JASPERREPORTS.....................................................................................................3

O IREPORT.....................................................................................................................4

DOWNLOAD E INSTALAÇÃO DO IREPORT.........................................................4

ESTRUTURA DE UM RELATORIO...........................................................................5

CONFIGURAÇÃO DO IREPORT...............................................................................8

MONTAGEM DO RELATÓRIO..................................................................................8

CONFIGURAÇÃO DO DATA SOURCE..............................................................................................................9

MONTAGEM DE UM RELATÓRIO SIMPLES COM O IREPORT.....................................................................11

UTILIZANDO ASSISTENTE...........................................................................................................................11

EDITANDO O RELATÓRIO......................................................................................17

COMPILANDO E PRÉ-VISUALIZANDO O RELATÓRIO NO IREPORT........18

ADICIONANDO PARÂMETROS AO RELATÓRIO..............................................19

ADICIONAR O PARÂMETRO À QUERY...............................................................20

CHAMADA DO RELATÓRIO NUMA APLICÇÃO WEB.....................................23

CONFIGURANDO O NETBEANS PARA EXECUTAR O RELATÓRIOS..........23

CONFIGURANDO AS BIBLIOTECAS DO JASPERREPORTS NO NETBEANS..........................................................................................................................................23

ADICIONANDO AS BIBLIOTECAS AO PROJECTO...........................................27

BIBLIOTECAS ADICIONAIS....................................................................................27

CRIANDO SERVLETS PARA CHAMAR OS RELATÓRIOS...............................28

SERVLET QUE PERMITE GERAR UM RELATÓRIOS.....................................................................................29

SERVLET PARA CHAMAR UM RELATÓRIO COM PARÂMETROS..............32

CHAMADA DO SERVLET PARA GERAR O RELATÓRIO COM PARÂMETROS.............................................................................................................36

PAGINA SIMPLES PARA PASSAR O PARÂMETRO...........................................36

2

Page 3: Tutorial Jasper Ireport

O JasperReports

O JasperReports é um Framework de código fonte aberto, utilizado para gerar relatórios multiplataforma. Escrita em java, essa biblioteca apresenta grande habilidde na orgnização e apresentação de conteúdo, permitindo a geração dinâmica de relatórios em diversos formatos, como PDF, HTML, XLS, CSV e XML, podendo ainde ser utilizada em qualquer aplicação Java, incluindo aplicações desktop, Web e distribuídas.

Usando XML, o desenvolvedor pode definir textos estáticos, imagens, linhas, formas geométricas, como rectângulos e elipses, e as suas localizações dentro do relatório. Quando pronto, esse ficheiro XML deve ser compilado e, então é gerado um ficheiro com a extensão .jasper, contendo a verão compilada do código XML.

O processo de desenvolvimento de um relatório começa com a codificação da definição do relatório em XML. Depois é criado um arquivo com a extensão .jrxml (o “template de relatório”), onde é descrita toda a estrutura do relatório: a posição de textos, imagens e formas geométricas; a forma de recuperação dos dados necessários, a forma de fazer cálculos e totalizações, e quais parâmetros devem ser passados, entre outras definições.

Download do JasperReports

O JasperReport está disponível na URL http://sourceforge.net/projects/jasperreports/. A sua configuração será vista mais adiante neste tutorial

3

Page 4: Tutorial Jasper Ireport

O IReport

O iReport é uma ferramenta visual que desenha ficheiros XML para o JasperReports. É um IDE de relatórios WYSIWYG.

Com iReport podemos definir o design do relatório dentro de um ambiente gráfico, contendo recursos necessários para desenvolver relatórios com os formatos suportados pela biblioteca JasperReports.

Este ambiente oferece muitas ferramentas que aceleram o desenvolvimento do relatório, desde a conexão com a base de dados até a atalhos para tarefas de compilação e (pré)-visualização do relatório, dando a possibilidade de realizar ensaios e testes sobre o layout dos relatórios.

Download e Instalação do iReport

O iReport está disponível no site http://ireport.sourceforge.net. A sua instalação é normal…{duplo clique e ‘nexts’}.

4

Page 5: Tutorial Jasper Ireport

Estrutura de um Relatorio

Um relatório é composto por várias secções. Seccções são paertes de um relatório que contém informações específicas, necessárias para uma boa apresentação. Essas secções podem conter imagens, textos, formas geométricas, ect. Na terminologia do JasperReports, as seccções são chamadas de Bands. Num documento, existem secções com propósictos específicos, onde cada um ercerce um papel na geração do relatório. A seguir são apresentadas as principais seccções existentes para a geração de relatórios.

Secções

Title

O conteúdo desta secção aparece apenas uma vez no início do relatório. Ex.: Contactos Telefónicos

Page Header

O conteúdo desta secção aparece no início de cada página. Neste local pode-se colocar a data e hora e/ou o nome ou informações da empresa.

Column Header

5

Page 6: Tutorial Jasper Ireport

O conteúdo colocado nesta secção aparece apenas no começo de cada coluna. Se o relatório tem uma só coluna definida, então são ignoradas as secções cabeçalhos e rodapés de coluna. Como exemplo, nesta secção podemos ter a lista dos campos escolhidos como : Nome do cliente, Telefone, E-mail.

Detail

O conteúdo desta secção se repete enquanto houver linhas para serem colocadas no relatório de acordo com o que existe na base de dados e os parâmetros passados.

Column Footer

Esta secção aparece abaixo de cada coluna. Vale o mesmo comentário da seccção Column Header.

Page Footer

Esta secção aparece apenas no fim de cada página. Nesta parte podemos ter informações como o número da página ou o total de paginas encontradas: “1/7”.

Last Page Footer

Esta seccção substitui o rodapé da página regular na última página do relatório.

Summary

Esta seccção só parece uma vez no término do relatório. Por exemplo, após ter listado todos os cadastros de clientes no detalhes (detail), pode-se querer expor algum detalhe num gráfico para melhorar a comparação visual.

6

Page 7: Tutorial Jasper Ireport

Janela de apresentação do iReport 3.6.11

Configuração do iReport

As opções principais de configuração do iReoprt estão disponíveis no menu Tools

1 No dia que terminei a primeira versão destes apontamentos apareceu já disponibilizada a versão 3.6.2. Tem muitas semelhanças com esta versão.

7

Page 8: Tutorial Jasper Ireport

Montagem do relatório

O sistema de gestão de bases de dados utilizado neste tutorial é o Mysql.

Antes de criar o relatório master ou relatório principal, é necessário configurar um data source (fonte de dados).

Configuração do data source

Na barra de ferramentas faça clique no botão Report Datasource

8

Page 9: Tutorial Jasper Ireport

2.º Na caixa de diálogo 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 diálogo que se abre configurar as propriedades conforme as configurações e parâmetros da base de dados

9

Page 10: Tutorial Jasper Ireport

… a seguir faça clique em Test. Se o teste for bem sucedido terá a seguinte mensagem…

… então 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 conexão activa. E feche a caixa de Diálogo

10

Page 11: Tutorial Jasper Ireport

Montagem de um relatório simples com o iReport

Podemos montar relatórios com o iReport, essencialmente de duas maneiras: Utilizando o assistente e criar um relatório 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 diálogo a seguir indicar o local onde pretende guardar o relatório.

Num projecto Web, crie uma subpasta debaixo da pasta WEB-INF2. Por exemplo uma subpasta chamada relatórios.

Na estrutura do projecto web

Existirão, entre outros, os seguintes subdirectórios:

relatórios para os ficheiros .jrxml e jasper que o irreport gera ao guardar e compilar o relatório

2 Essa estrutura é importante, sob pena de surgirem muitas dificuldades para visualizar os relatórios

11

Page 12: Tutorial Jasper Ireport

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 necessários para o projecto funcionar;

… continuando

… e clique em next para prosseguir

12

Page 13: Tutorial Jasper Ireport

… na etapa Query, na secção Connections/Data Sources, escolher a conexão.

… e clique em next para prosseguir.

E para fazer a consulta que fornecerá os dados para o relatório, na caixa de diálogo que aparece a seguir, faça clique sobre o botão Design query

2.º Clique em Design query

… na janela que aparece faça duplo clique sobre a tabela(s), a partir da(s) qual(ais) pretende criar o relatório.

3.º Na tabela seleccionada,

13

Page 14: Tutorial Jasper Ireport

Marque os campos que pretende ver(visualizar no relatorio)

…. E clique em OK.

A seguir clique em Next para prosseguir

4.º Na janela que aparece

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

A seguir faça clique em Next.

14

Page 15: Tutorial Jasper Ireport

… Na janela que se segue, estão disponíveis as opções de agrupamento

… para o exemplo actual. Não é necessário escolher nenhuma opção de agrupamento. Faça clique em Next e verá a seguinte mensagem. Faça clique em Finish

15

Page 16: Tutorial Jasper Ireport

O relatório base está pronto.

16

Page 17: Tutorial Jasper Ireport

Editando o relatório.

Trabalhando com o exemplo actual.

Um pequeno cuidado deve-se ter em conta. Os campos que aparecem precedidos de um cifrão {$F}, apontam para campos da tabela da base de dados. Não devem ser ‘mexidos’.

Os outros são textos estáticos. Podem e devem ser editados. Para tal basta fazer duplo clique sobre o item a editar ou seleccionar o item e depois premir a tecla F2. Com O iReport é possível aplicar variadíssimas formatações ao relatório.

Compilando e pré-visualizando o relatório no iReport

Feitas as necessárias formatações e guardado o relatório, na barra de ferramentas do relatório faça clique no botão Compile Report, para compilar

..e depois sobre o botão Preview, para pré-visualizar o relatório.

17

Page 18: Tutorial Jasper Ireport

Pré-visualização do relatório

… ao mesmo tempo o iReport 3.6.1 compila o relatório e cria dois ficheiros, no local onde está guardado o relatório. Um com a extansão .jasper e ou com a extensão .jrxml. Estes dois ficheiros são importantes para a visualização do relatório na aplicação. Os dois devem estar na pasta da aplicação de onde vão ser chamados os relatórios.

Adicionando Parâmetros ao Relatório

18

Page 19: Tutorial Jasper Ireport

Antes de construirmos o aplicativo para chamar o relatório, vamos ver os procedimentos para criar um parâmetro que permitirá, por exemplo mostrar os dados de um determinado Funcionário, ou, por exemplo, de uma determinada Factura.

Vamos criar um relatório que envolva um campo de identificação unívoca e depois de todas as formatações e configurações…

No Report Inspector faça clique com o botão direito no mouse sobre Parameters e escolha Add Parameter

…e na caixa Properties escreva o nome do parâmetro, na secção Name, escolha o tipo de dado na secção Parameter Class.

19

Page 20: Tutorial Jasper Ireport

No exemplo mostrado temos uma parâmetro chamado codigoFuncionario, do tipo Integer.

Como vamos precisar de testar o relatório, seleccione o item Use as a Prompt. Isso fará com que um promt apareça para que possamos escrever o paramentro solicitado, para teste.

Existe também o campo Default Value Expression. É a opção padrão para o valor do prompt.

Adicionar o parâmetro à query

Para que o parâmetro venha a ter efeito é necessário adiciona-lo à

query. Para tal, na barra de ferramentas clique no botão Report Query e a seguir clique no botão Query Designer.

Na caixa de diálogo SQL Query Designer, no quadro à direita, na tabela com o campo que deseja como condição, clique com o botão direito do mouse e no menu de contexto, seleccione o item add where condition.

20

Page 21: Tutorial Jasper Ireport

Ao surgir a caixa de diálogo condition.edit, a parte superior estará preenchida com o campo escolhido. Resta apenas manter a condição de igualdade e escrever na parte inferior o parâmetro criado. O formato completo do parâmetro será $P{codigoFuncionario}3, por exemplo. A caixa de diálogo preenchida será parecida com a seguinte.

Após a confirmação, na construção da query, a condição WHERE aparecerá contendo a comparação do campo escolhido com o parâmetro passado.

No caso em construção ao voltar à caixa de diálogo Report query termos a instrução SQL com a condição WHERE contendo o codigoFuncionario comparado com o parâmtro $P{codigoFuncionario}.

Executando o relatório. Antes de mostrar o relatório, o IReport mostra um promt chamado Parameter prompt.

3 Este nome será importante para o servlet chamar correctamente o relatório

21

Page 22: Tutorial Jasper Ireport

O campo pode vir já preenchido com um valor padrão, esperando que se escreva um novo valor. A baixo aparece o tipo aceite e a descrição, caso se tenha feito, do parâmetro. Mesmo que se apague o parâmetro padrão, se for preciso testar o relatório com este número, basta fazer clique no botão Use default.

Chamada do relatório numa Aplicação Web

Pré-Requisitos

Conhecimentos de Servlets e JSP.

Configurando o NetBeans para executar o relatórios

Para se poder visualizar o relatorio criado é necessário adicionar algumas bibliotecas do JasperReports. Por segurança adicionaremos todas as que começam por common (common collections por exemplo) mais a biblioteca iText. O último passo será implementar a classe que gera o relatório.

Depois se ter feito o download da versão mais recente das bibliotecas do JasperReport, deve descomprimir o package baixado e no directório lib

22

Page 23: Tutorial Jasper Ireport

seleccionar os seguintes .jar. De preferência, é 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 então utili-lo na aplicação, os passos são os seguintes.

Aceda ao menu Tools e clique em Libraries

23

Page 24: Tutorial Jasper Ireport

2. Na caixa de diálogo Library Manager, clique em New Library...

3. E na caixa de diálogo New Library na secção Library Name:, escrever JasperReports (se desejar colocar a versão… é bastante sugestivo) e em Library Type: escolha Class Libraries. Clique no botão OK para confirmar.

24

Page 25: Tutorial Jasper Ireport

4. De volta, na caixa de diálogo Library Manager, clique no botão Add JAR/Folder e adicionar os ficheiros .jar do JasperReport, referidos anteriormente e confirmar.

25

Page 26: Tutorial Jasper Ireport

Finalmente os ficheiros configurados estarão disponíveis no campo Library Classpath da aba Classpath.

Adicionando as bibliotecas ao projecto.

Na janela Projects, clique com o botão direito do mouse sobre Libraries, com o projecto expandido, seleccione Add Library no menu de contexto. Na caixa de diálogo Add Library, seleccione a livraria JasperReport (criada anteriormente). Confirme clicando no botão Add Library.

26

Page 27: Tutorial Jasper Ireport

Ainda pode fazer clique com o botão direito o mouse sobre o projecto e escolher a opção properties.

… nesta caixa de diálogo seleccione a categoria Libraries e na secção Cimple faça clique sobre o botão Add Library…

Bibliotecas adicionais.

Além da livraria do JasperReport adicone também as livrarias Spring Framework 2.5 e Groovy 1.5.5. Estas livrarias já vêem incorporadas no NetBeans. Basta adiciona-las ao projecto

27

Page 28: Tutorial Jasper Ireport

Criando servlets para chamar os relatórios

Para criar um servlet, clique com o botão direito do mouse sobre o modulo Web do projecto e seleccione o item New e clique em Servlet. Escreva RelatorioSemParametros. Na secção Package escrever relatórios…

… clique em next, para prosseguir.

…deixe marcada a opção Add information to deployment descriptor(Web.xml). Clique no botão Finish para completar.

28

Page 29: Tutorial Jasper Ireport

Adicione ao servlet o código mostrado a seguir e guarde as alterações.

Servlet que permite gerar um relatórios sem parâmetros

ppublic class RelatorioSemParametros extends HttpServlet

{

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException, Exception

{

Connection conn = null;

conn = Conexao.getConnection();

// gera o relatório

ServletContext context = getServletContext();

byte[] bytes = null;

try

{

// carrega os arquivos jasper

JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(

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

// parâmetros, se houver

29

Page 30: Tutorial Jasper Ireport

Map parametros = new HashMap();

// direcciona a saída do relatório para um stream

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

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

{

// envia o relatório 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,

30

Page 31: Tutorial Jasper Ireport

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";

}

}

31

Page 32: Tutorial Jasper Ireport

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

Pagina JSP que chamará o relatório

Pagina Simples para chamar o servlet e mostrar o relatório

<body>

<center>

<h1>Visuzalização do Relatorio!</h1>

<a href=" RelatorioSemParametros ">Relatorio Sem Parámentos</a>

</center>

</body>

Trabalhando com parâmetros no relatórios.

O primeiro exemplo demonstra apenas a chamada ao relatório criado, sem transmitir parâmetros. No segundo exemplo serão adicionados parâmetros ao relatório.

32

Page 33: Tutorial Jasper Ireport

Os parâmetros são passados durante o processo de criação do relatório. Ver secção Adicionando Parâmetros ao Relatório

.

Servlet para chamar um Relatório com parâmetros

Nesta parte será apresentado um exemplo de código de servlet que construi um relatório em função do parâmetro passado.

Para começar. Crie um novo servlet com o nome RelatorioComParametros e adicione a ele o código seguinte.

Relatório com parâmetro – 1.º Exemplo de código

public class RelatorioComParametros extends HttpServlet {

/**

* 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 relatório

33

Page 34: Tutorial Jasper Ireport

ServletContext context = getServletContext();

byte[] bytes = null;

try {

// carrega os arquivos jasper

JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(

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

// parâmetros, 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 saída do relatório para um stream

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

System.out.println("Certo");

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

// envia o relatório 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)

34

Page 35: Tutorial Jasper Ireport

{

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

{

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 {

35

Page 36: Tutorial Jasper Ireport

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";

}// </editor-fold>

}

O parâmetro passado é um java.util.HashMap, que define se haverá um ou mais parâmetros. O parâmetro criado no relatório tem um nome, e é este que deve ser utilizado neste HashMap: código (referindo-se a $P{codigoFuncionario}. Como se trata de uma chave do tipo String e de um valor numérico inteiro, graças ao método put(Key, Value), o exemplo capturará o campo chave de cada funcionários e transmitirá ao parâmetro, da seguinte forma:

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

36

Page 37: Tutorial Jasper Ireport

Chamada do servlet para gerar o relatório com parâmetros

Crie uma paginas Jsp e adicione um formulário (form).

Dentro do form adicione uma inpuText com o name “codigoFuncionario”, ou conforme o caso.

Adicione ainda um botão do tipo submit

Defina como POST o method do form e no action passe o nome do servlet que receberá o parâmetro. No caso do exemplo “RelatorioComParametros”

Pagina Simples para passar o parâmetro

<body>

<center>

<h1>Visuzalização dos Relatorios!</h1>

<br>

<form method="POST" action=" RelatorioComParametros">

Escreva o código do Funcionario

<input type="text" name="codigoFuncionario" value="" />

<input type="submit" value="Mostrar o relatorio" />

</form>

</center>

</body>

37

Page 38: Tutorial Jasper Ireport

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

("Você deve ser a mudança que quer ver no mundo")

“Gandhi”

38