relatórios marco antonio software architect agosto - 2008
TRANSCRIPT
RelatóriosMarco AntonioSoftware ArchitectAgosto - 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 ISO-
8859-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óriopackage 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.
GeradorDeRelatoriopackage 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(); }%>