Tutorial Jasper Ireport
Tutorial Jasper Ireport
iReport e JasperReport
em Aplicaes Web com NetBeans 6.8
Autor: Joaquim Jos Hangalo
[email protected]
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.
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.
Configurao do iReport
As opes principais de configurao do iReoprt esto disponveis no menu Tools
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).
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
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
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
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
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
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
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.
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
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
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.
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.
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.
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
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.
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
deixe marcada a opo Add information to descriptor(Web.xml). Clique no boto Finish para completar.
deployment
28
conn = Conexao.getConnection();
// gera o relatrio
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
@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); } }
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
</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 .
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();
// <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); } }
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")));
<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