Tutorial Jasper Ireport

Post on 08-Aug-2015

177 views 3 download

Transcript of Tutorial Jasper Ireport

Relatórios com

iReport e JasperReportem Aplicações Web

com NetBeans 6.8

Autor:

Joaquim José Hangalo

joajoshang@gmail.com

Luanda, Outubro de 2009

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

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

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

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

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

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

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

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

… 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

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

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

… 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

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

… 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

O relatório base está pronto.

16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

{

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

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

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

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