Relatórios Marco Antonio Software Architect Agosto - 2008 Introdução • JasperReport – Framework java para relatórios com grande habilidade na organização e apresentação de conteúdo, permitindo a geração dinâmica de relatórios em diversos formatos (pdf, html, xls, csv e xml). • iReport – Interface gráfica para o Jasper. Tela inicial Criando um novo relatório • Menu Arquivo -> Novo... • Ou Ctrl + N Propriedades do relatório • Configuração dos dados do relatório Codificação • Altere para ISO8859-1 Design do relatório • Observe as barras de ferramenta disponíveis Classpath • Nosso relatório deve ter acesso à classe EmpresaAerea. • Esse tipo de acesso é configurado através do classpath. Diretório de classes • Procure o diretório build/classes dentro de sua aplicação. • É onde ficam as classes compiladas. Campos do relatório • Acesse o menu -> Data -> Query do Relatório. Campos do relatório • Clique no botão “Ler Atributos”. Campos do relatório • Esses serão os campos disponíveis para visualização no relatório Estrutura do documento • Navegue pela estrutura do documento e veja quais os dados disponíveis para o relatório. Design do relatório • Acrescente um texto estático com o título do relatório, bem como os nomes das colunas. • Arraste os campos referentes a nomeFantasia e razaoSocial para o relatório. Design do relatório Propriedades do campo texto • Selecione as propriedade do título do relatório com o botão direito e altere os dados da fonte. Salve o arquivo • Crie o diretório relatorios dentro de WEB-INF. Opções • No menu Opções -> Opções altere a opção conforme a figura. Compilação do relatório • Veja na barra de ferramentas o ícone de compilação. • A partir desse momento o diretório está pronto para ser acessado pela aplicação. Outros campos • Crie mais um campo texto para a data. • Com o botão direito escolha “Edit Expression”. Expressões • Com o editor de expressões podemos escrever código java nativo, utilizando qualquer classe disponível. Campos do relatório Campos • Colunas do banco de dados disponíveis para o relatório. Variáveis pré-definidas • Principais contadores disponíveis. Parâmetros • Existe a possibilidade de enviar dados isolados da aplicação para o relatório através de parâmetros. Novo parâmetro • Para exemplificar, vamos criar o parâmetro NomeDoSistema. Design final do relatório Libs do projeto • • • • • • Commons-javaflow iReport iText Jasperreports Jcommon Jfreechart Teste do relatório package net.sca.entidades.teste; import java.io.*; import java.util.*; import net.sca.persistencia.*; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.*; public class TesteRelatorioEmpresa { public static void main(String[] args) { try { (1) FileInputStream input = new FileInputStream( "C:/Sistemas/workspace_javaweb/SistemaDeControleAereo/WebContent/WEB-INF/relatorios/RelatorioDeEmpresas.jasper"); (2) FileOutputStream saida = new FileOutputStream("c:/RelatorioDeEmpresas.pdf"); (3) JRDataSource dados = new JRBeanCollectionDataSource(new DAOEmpresaAerea().consultarTodos()); (4) Map mapaDeParametros = new HashMap(); mapaDeParametros.put("NomeDoSistema", "Sistema de Controle Aéreo"); (5) JasperRunManager.runReportToPdfStream(input, saida, mapaDeParametros, dados); System.out.println("Relatório gravado com sucesso"); } catch (Exception e) { e.printStackTrace(); } } } Detalhamento 1. Abre o arquivo do relatório. 2. Cria o arquivo de saída, no exemplo, um pdf. 3. Fonte de dados, fornecida pelo DAO através de uma coleção de objetos. 4. Mapa com parâmetros do relatório. 5. Monta o relatório com dados do DAO, e grava no arquivo de saída. GeradorDeRelatorio package com.sistemabancario.entidades; import java.io.*; import java.util.*; import javax.faces.context.*; import javax.servlet.*; import net.sca.persistencia.*; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.data.*; public class GeradorDeRelatorio { public void executaRelatorio(String nomeDoRelatorio, OutputStream saida) { try { GeradorDeRelatorio (1) ExternalContext e = FacesContext.getCurrentInstance().getExternalContext(); ServletContext s = (ServletContext) e.getContext(); String diretorioDosRelatorios = s.getRealPath("/WEB-INF/relatorios"); (2) InputStream entrada = new FileInputStream(diretorioDosRelatorios + "/" + nomeDoRelatorio); (3) Map mapaDeParametros = new HashMap(); mapaDeParametros.put("NomeDoSistema", "Sistema de Controle Aéreo"); (4) JRDataSource dados = new JRBeanCollectionDataSource(new DAOEmpresaAerea() .consultarTodos()); (5) JasperRunManager.runReportToPdfStream(entrada, saida, mapaDeParametros, dados); } catch (Exception e) { e.printStackTrace(); } } } Detalhamento 1. Recupera dados do contexto da aplicação, no caso, o diretório. 2. Abre o arquivo do relatorio (RelatorioDeEmpresas.jasper) que está no diretório WEB-INF. 3. Mapa com parâmetros a serem passados aos relatório. 4. Fonte de dados, coleção de objetos que serão exibidos no relatório. 5. Mostra o relatório no browser do cliente. VisualizadorRelatorioDeEmpresas.jsp <%@page import="com.sistemabancario.entidades.GeradorDeRelatorio;"%> <% try { out.clear(); GeradorDeRelatorio gerador = new GeradorDeRelatorio(); ServletOutputStream output = response.getOutputStream(); response.setContentType("application/pdf"); response.addHeader("Content-Disposition", "Inline;"); gerador.executaRelatorio("RelatorioDeEmpresas.jasper", output); output.flush(); output.close(); } catch (Exception e) { e.printStackTrace(); } %>