java relatorios

Upload: marcel-santos

Post on 07-Apr-2018

272 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 Java Relatorios

    1/29

    1

    April 05 Prof. Ismael H. F. Santos - [email protected] 1

    Modulo III Relatrios e

    Grficos em Java

    Prof. Ismael H F Santos

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 2

    Ementa

    Modulo III Relatrios em JAVA

    Relatrios - Jasper e IReports

    Modulo III Grficos em JAVA

  • 8/6/2019 Java Relatorios

    2/29

    2

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 3

    Linguagem de Programao JAVA

    Ismael H. F. Santos, Apostila UniverCidade, 2002

    The Java Tutorial: A practical guide for programmers

    Tutorial on-line: http://java.sun.com/docs/books/tutorial

    Java in a Nutshell

    David Flanagan, OReilly & Associates

    Just Java 2

    Mark C. Chan, Steven W. Griffith e Anthony F. Iasi, Makron

    Books.

    Java 1.2

    Laura Lemay & Rogers Cadenhead, Editora Campos

    Bibliografia

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 4

    Livros

    Core Java 2, Cay S. Horstmann, Gary Cornell Volume 1 (Fundamentos) Volume 2 (Caractersticas Avanadas)

    Java: Como Programar, Deitel & Deitel

    Thinking in Patterns with JAVA, Bruce Eckel Gratuito. http://www.mindview.net/Books/TIJ/

  • 8/6/2019 Java Relatorios

    3/29

    3

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 5

    Relatrios

    JasperReports

    FPSW-Java

    Relatrios

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 6

    JasperReports

    Framework open-source escrito em Java paragerao de relatrios

    http://jasperreports.sourceforge.net/

  • 8/6/2019 Java Relatorios

    4/29

    4

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 7

    iReport

    O iReport uma ferramenta que visa facilitara construo de relatrios (layout) utilizandoa biblioteca JasperReports atravs de umainterface grfica desenvolvida em Swing.

    Fornece suporte construo de relatrios

    complexos. Elimina a necessidade de manipulao direta

    dos arquivos JRXML.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 8

    Usando JasperReports/iReport

    1. Criao do desenho (layout) do relatrio;2. Preenchimento do relatrio com dados;3. Visualizao (e/ou exportao) do relatrio

    (PDF, HTML, XLS, etc).

    Obs.: passo 1 realizado no iReport; passos 2 e 3 so programticos, com o uso

    da biblioteca JasperReports.

  • 8/6/2019 Java Relatorios

    5/29

    5

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 9

    Funcionamento

    O design do relatrio definido em um arquivoXML, que obedece aestrutura declarada noarquivojasperreports.dtd.

    O arquivo XML compilado gerando um

    arquivo .jasper, onde asexpresses Javaexistentes dentro do XMLsero verificadas emtempo de compilao.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 10

    Funcionamento (cont.)

    Pode-se ainda definir oscampos que seropreenchidos dinamicamentea partir de uma base dedados.

    Diferentes objetosJasperreports so usadospara representar as etapasdo processo de gerao derelatrios: JasperDesign test.jasper JasperPrint -> test.pdf

  • 8/6/2019 Java Relatorios

    6/29

    6

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 11

    JasperReports DataSources

    Para produzir um relatrio precisamos fornecer dados aoJasper. consultas SQL inserida no arquivo XML um objeto ResulSet gerando por uma classe Java

    Interface JRDataSource abstrai diferentes fontes de dados,fornecendo os seguintes tipos: JREmptyDatasource - especial datasource usado para

    preencher relatrios que no possuem registros ou dadosrecuperados

    JRResultSetDataSource - implementao padro destainterface para objetos ResultSet

    XML DataSource - empacotar um arquivo XML e normalizarseu contedo. As nicas informaes necessrias para criareste tipo de datasource so: o nome do datasource e o nomedo arquivo XML.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 12

    JasperReports DataSources

    TableModel DataSource acessa tabelas j carregadas eminterfaces swing.

    JavaBeans Set Datasource - capaz de empacotar umaCollection ou um Array de JavaBeans. necessrio umaclasse especial de fbrica (factory) que fornea um mtodo

    esttico para gerar a coleo ou um array de JavaBeans. Custom Datasource - datasource genrico. necessrio uma

    classe especial de fbrica (factory) que fornea um mtodoesttico que retorne um JRDataSource.

    No linguajar Jasper", um datasource somado a um arquivo.jasper gera um "print", que pode ser "exportado" para osformatos PDF, HTML, XML, CVS ou XLS.

  • 8/6/2019 Java Relatorios

    7/29

    7

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 13

    Campos e Parmetros

    Campos(Fields) so reas especficas no relatrioque recebero diretamente os dados das respectivascolunas referenciadas.

    Parmetrosso dados passados para a operao depreenchimento, que no podem ser encontradosnormalmente na fonte de dados. Passados via cdigo Java, atravs da classe HashMap:

    Map parametros = new HashMap( ); parametros.put(Cliente, Fulano de Tal );

    Utilizados, por exemplo, na query do relatrioSelect * FROM CLIENTE WHERE CLIENTE=$P{Cliente}

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 14

    Variveis

    Variveisso utilizadas para armazenarresultados temporrios necessrios para geraodo relatrio podem referenciar tipos internos de clculos, como

    contagem (count), soma (sum), mdia (average),menor (lowest), maior (highest), etc

    ${ValorProduto}

  • 8/6/2019 Java Relatorios

    8/29

    8

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 15

    Variveis

    A ordem em que as variveis so declaradas norelatrio importante.

    Podemos definir o nvel no qual uma varivel ir serinicializada. Pode ser no incio do relatrio (uma nicavez), a cada pgina, coluna ou grupo. ${ValorProduto}

    new Double( 0 )

    Variveis internas da ferramenta: PAGE_NUMBER,COLUMN_NUMBER, REPORT_COUNT,PAGE_COUNT, COLUMN_COUNT.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 16

    Expresses

    Expresses(Expressions) so utilizadas para especificaro contedo de campos de texto, na realizao de clculosfreqentes

    Todas elas so expresses Java que podem conter emsua sintaxe: campos: acessado com $F{nome} parmetros: acessado com $P{nome} variveis de relatrio: acessado com $V{nome}.

    Exemplo de uma expresso: Sr.(a) + $F{Cliente} + " realizou um

    total de compras no valor de " + $V{ValorTotalCompraSum}+ " no dia " + (new SimpleDateFormat("dd/MM/yyyy")).format($F{DataCompra}) + "."

  • 8/6/2019 Java Relatorios

    9/29

    9

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 17

    Layout

    O JasperReports divide o layout do relatrio emreas pr-definidas, chamadas sees.

    As sees levam em considero a estruturavisual de um relatrio. So elas: background,title, pageHeader, columnHeader, detail,columnFoter, pageFooter, lastPageFooter e

    summary.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 18

    Sees do layout do relatrio

  • 8/6/2019 Java Relatorios

    10/29

    10

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 19

    JasperReport API

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 20

    JasperReport API (cont.)

    Classe net.sf.jasperreports.engine.design.JasperDesign representam o relatrio no seu formato mais primitivo. So

    resultados de um processamento sobre o arquivo XML.

    Classe net.sf.jasperreports.engine.JasperReport

    relatrios compilados armazenados em arquivos .jasper.Nesse estgio, toda a anlise sinttica nas expressesexistentes no XML j foram realizadas.

    Classe net.sf.jasperreports.engine.JasperPrint JasperReport com todos os campos preenchidos, pode ser

    visualizado diretamente utilizando visualizadores internos doJasperReport. Tambm pode ser transformado em formatosmais populares como HTML, XML ou PDF

  • 8/6/2019 Java Relatorios

    11/29

    11

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 21

    JasperReport API (cont.)

    Interface net.sf.jasperreports.engine.JRDataSource padroniza o comportamento das classes que manipulam as

    fontes de dados necessrias durante o preenchimento doscampos existentes no JasperReport.

    Classe net.sf.jasperreports.engine.JasperFillManager utilizada para gerar instncias da classe JasperPrint

    utilizando uma fonte de dados (JRDataSource) e uma

    instncia da classe JasperReport. Classe net.sf.jasperreports.engine.JasperPrintManager

    Permite imprimir o relatrio completo ou pginas do mesmo. possvel imprimir o relatrio como uma imagem ( utilizandoo mtodo printPageToImage)

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 22

    JasperReport API (cont.)

    Classe net.sf.jasperreports.engine.JasperExportManager gera documentos nos formatos PDF, HTML e XML (v 1.0).

    Exemploimport java.sql.Connection;....

    import net.sf.jasperreports.engine.xml.JRXmlLoader;import net.sf.jasperreports.view.JasperViewer;public class JasperReportExemple {private static final String url = "jdbc:mysql://127.0.0.1/teste";private static final String driver = "com.mysql.jdbc.Driver";private static final String login = "";private static final String pwd = "";public JasperReportExemple() { }

  • 8/6/2019 Java Relatorios

    12/29

    12

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 23

    JasperReport API (cont.)

    public void gerar( String layout ) throws JRException , SQLException,ClassNotFoundException {//gerando o jasper design JasperDesigndesenho = JRXmlLoader.load( layout );//compila o relatrio JasperReportrelat = JasperCompileManager.compileReport( desenho );//estabelece conexoClass.forName( driver );Connection con = DriverManager.getConnection( url , login , pwd );

    Statement stm = con.createStatement();String query = "select * from turma";ResultSet rs = stm.executeQuery( query );//implementao da interface JR ResultSetDataSourceJRResultSetDataSourcejrRS = new JRResultSetDataSource( rs );

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 24

    JasperReport API (cont.)

    //executa o relatrioMap params = new HashMap();params.put("nota", new Double(10));JasperPrint imp = JasperFillManager.fillReport( relat , params,jrRS );

    //exibe o resultado

    JasperViewer viewer = new JasperViewer( imp , true );viewer.show();

    }public static void main(String[] args) {

    try { new JasperReportExemple().gerar( "report.jrxml" );} catch (Exception e) { e.printStackTrace(); }

    }}

  • 8/6/2019 Java Relatorios

    13/29

    13

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 25

    Layout do

    Relatrio

    IReport

    FPSW-Java

    Relatrios

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 26

    IReport

    O iReport uma ferramenta que permite definiro design do relatrio dentro de um ambientegrfico, contento todos os recursos que abiblioteca Jasper oferece.

    possvel definir relatrios com designsmodernos e complexos sem se quer escreveruma linha de cdigo XML, que todo geradoautomaticamente

  • 8/6/2019 Java Relatorios

    14/29

    14

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 27

    Criar um arquivo JRXML

    Relatrio no iReport armazenado em um .jrxml No menu File, clique em

    New Document; Aparece a janela para

    configurao do seu

    relatrio: o nome do relatrio, tamanho da folha, margens, colunas do relatrio

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 28

    Sees do layout do relatrio

    Design do relatrio utiliza a barra de ferramentas

    O contedo da banda title aparece somente uma vez nocomeo do relatrio.

    O que definimos na banda pageHeader aparece no altode cada pgina do mesmo. Esta parte pode, por exemplo, conter a data/hora e/ou o

    nome da organizao.

    O columnHeader lista nomes daqueles camposespecficos que voc quer apresentar. Por exemplo do Nome do empregado, Hora de Incio,

    Hora de trmino, Horas trabalhadas, etc.

  • 8/6/2019 Java Relatorios

    15/29

    15

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 29

    Sees do layout do relatrio

    O detail a banda onde os valores dos campos soapresentados. Por exemplo, Jorge Horacio, 12:00h,18:00h, 06 horas

    O columnFooter pode indicar a soma de alguns doscampos. Por exemplo Horas totais trabalhadas: 180

    O pageFooter aparece no final de cada pgina. Podeconter o nmero da pgina como 1/7.

    O summary a banda onde a informao inferida apartir dos dados da banda detalhe indicada. Por exemplo, aps ter listado as horas trabalhadas para

    cada empregado na banda do detalhe, as horas totaistrabalhadas para cada empregado podem serapresentadas em um grfico de torta.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 30

    Exemplo

    A tabela a seguir os textos Relatrio Biblioteca Pessoal,Data:, Cdigo, Ttulo, Volume, Edio, Editora, Autore Adquirido em so campos de texto esttico

    A tabela contm

    dois Retngulosarredondadosenquanto osoutros elementosso todoscampos (fields)

  • 8/6/2019 Java Relatorios

    16/29

    16

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 31

    Definio da fonte de dados

    Para a criao do relatrio, preciso obteracesso aos metadados de uma fonte dedados.

    Para isso, necessrio definir essa fonte. Os metadados da fonte so usados na

    definio do layout do relatrio.

    O iReport prov suporte a diversas fontes dedados: JDBC, Hibernate, etc.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 32

    Fonte de dados via JDBC

    Configure a conexo testar se a conexo

    foi configuradacorretamente.

    Clique em Save parasalvar a conexo.

    Para alterar a configuraoda conexo, clique noboto "Modify" da janela"Connections/Datasources"

  • 8/6/2019 Java Relatorios

    17/29

    17

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 33

    Definir a consulta do relatrio

    Aps a definio da fonte de dados, devemosdefinir a consulta do relatrio.

    Essa consulta tem os seguintes objetivos: apresentar ao iReport os metadados; permitir testar o relatrio com informaes

    provenientes da fonte de dados.

    Para definir a consulta, obtenha acesso opo Dados | Consulta do Relatrio nabarra de menus do iReport.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 34

    Desenhar o relatrio

    Aps a definio da consulta, os campos doresultado da consulta ficam disponveis paradesenhar o relatrio. Veja a janela Library Expanda a pasta Campos Arraste os campos desejados para a seo

    adequada do relatrio (normalmente essaseo a details)

  • 8/6/2019 Java Relatorios

    18/29

    18

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 35

    Compilar o relatrio

    Aps o desenho do relatrio, devemos compil-lo. Esse processo corresponde a gerar uma

    representao em formato binrio do relatrio. Resultado da compilao um arquivo com a

    extenso .jasper. essa representao que usamos com o

    JasperReport para preencher o relatrio. Para compilar o relatrio, use a opo Criar |

    Compilar na barra de menus do iReport. H tambm um cone na barra de cones.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 36

    Compilar o relatrio

    O detail a banda onde os valores dos campos so apresentados. Por exemplo, Eduardo Bezerra, 12:00h, 18:00h, 06 horasO detail a banda onde os valores dos campos so apresentados. Por exemplo, Eduardo Bezerra, 12:00h, 18:00h, 06 horas

  • 8/6/2019 Java Relatorios

    19/29

    19

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 37

    Preencher e

    Visualizar o

    Relatrio

    FPSW-Java

    Relatrios

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 38

    Preencher o relatrio

    Classe JasperFillManager Principal mtodo: fillReport (esttico)

    Retorna objeto JasperPrint

    Assinatura:JasperPrint fillReport(

    String sourceFileName,HashMap parameters,Connection connection);

  • 8/6/2019 Java Relatorios

    20/29

    20

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 39

    Preencher o relatrio (cont.)

    Parmetros de fillReport: String sourceFileName: corresponde ao nome

    do relatrio compilado (.jasper). HashMap parameters: lista de parmetros do

    relatrio (e.g., ttulo, data, sesso) Connection connection: conexo (JDBC) com a

    fonte de dados utilizada para preencher orelatrio.

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 40

    Exportar o relatrio

    JasperExportManager Classe til quando queremos exportar o relatrio

    para diversos formatos.

    Exemplos:JasperExportManager.exportReportToHtmlFile(

    print, "hello.html");

    JasperExportManager.exportReportToPdfFile(

    print, "hello.pdf");

    JasperExportManager.exportReportToXmlFile(

    print, "hello.xml", false);

  • 8/6/2019 Java Relatorios

    21/29

    21

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 41

    Visualizar o relatrio

    JasperViewer Classe til para visualizao do relatrio. O visualizador utilizado do prprio Jasper

    O mtodo viewReport (esttico) usado paraapresentar o relatrio no visualizador.

    Assinatura:JasperViewer.viewReport(

    JasperPrint jasperPrint,boolean isExitOnClose)

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 42

    Recursos relevantes

    http://jasperreports.sourceforge.net/

    http://jasperforge.org/sf/projects/ireport

    http://www.jfreechart.org/

    http://www.javafree.org/javabb/viewtopic.jbb?t=3154

  • 8/6/2019 Java Relatorios

    22/29

    22

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 43

    JFreeChartFPSW-Java

    Relatrios

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 44

    O que JFreeChart?

    JFreeChart uma biblioteca livre para a Javautilizada em Aplicaes Desktop, Applets, Servletse JSP. http://www.jfree.org/jfreechart/index.html

  • 8/6/2019 Java Relatorios

    23/29

    23

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 45

    O que JFreeChart?

    JFreechart pode ser usado para gerar grficos dePizza, grficos de Barra, grficos de linha (com ousem efeito 3D), grficos combinados, dentrediversos outros tipos de grficos. Exporta dadospara o formato PNG ou JPEG, Exporta paraqualquer formato usando a implementao de

    Graphics2D incluindo: PDF via iText (http://www.lowagie.com/iText/); SVG via Batik (http://xml.apache.org/batik/);

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 46

    Usando JFreeChart

    Os .jars do JFreeChart sojcommon-1.0.12.jar ejfreechart-1.0.9.jar devem ser adicionados ao libdo projeto.

  • 8/6/2019 Java Relatorios

    24/29

    24

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 47

    JFreeChart -> IReport

    Para anexar os grficos do JFreeChart ao IReport preciso instalar o plugin-netbeans do IReport.1209691533171__iReport-nb-0.9.1.2.nbm

    Gerando os Grficos

    Primeiramente, vamos criar as classesModeloGraficoItem que armazenar os dados quedaro origem ao grfico e

    ComposicaoDadosItemGrafico que gerar valoresarbitrrios que sero exibidos no grfico: ModeloGraficoItem.java

    ComposicaoDadosItemGrafico.java

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 48

    Criando modelo no IReport

    No IReport criamos um formulario para receber: Os dados que geraram o grfico apresentados em

    forma de listagem; A imagem do grfico;

    O relatrio contm3 fields parareceber os valoresque daro origemao grfico.

  • 8/6/2019 Java Relatorios

    25/29

    25

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 49

    Modelo no IReport -> JFreeChart

    Nesta mesma tela, na aba Parameters vamoscriar o parmetro que ir receber a imagem.Observe que este parmetro deve ser do tipo

    java.lang.Object:

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 50

    Modelo no IReport -> JFreeChart

    Para mostrar a imagem do grfico vamos criar umcampo na banda Sumary com a ferramentaImageTools que receber um objeto imagemporparmetro:

  • 8/6/2019 Java Relatorios

    26/29

    26

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 51

    Modelo no IReport -> JFreeChart

    A montagem final do Modelo ficou assim (salvocom o nome de ModeloGrafico): .

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 52

    Modelo no IReport -> JFreeChart

    A aplicao devera ter uma classe cujas funcoes so: Receber os valores gerados pela classe

    ComposicaoDadosItemGrafico; Chamar a classe GeradorGrafico para criar um grfico a partir

    dos da dados recebidos; Chamar o ModeloGrafico.jasperexibindo o relatrio em formato

    PDF em uma janela do browser. Para criar a imagem do grfico vamos usar a classe BufferedImageque ser o objeto adicionado ao parmetro.

    BufferedImage imagem =GeradorGrafico.gerarGraficoLinha3D("Titulo", "Mes","Quantidade", array);

    A classe HashMap de java.util usada para passar os parmetrospara o relatrio:HashMap params = new HashMap();params.put("imagem", imagem);

  • 8/6/2019 Java Relatorios

    27/29

    27

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 53

    Modelo no IReport -> JFreeChart

    // A String pathJasper garda o caminho para o relatriocompilado ModeloGrafico.jasper localizado nasubpasta

    //relatorio/graficoString pathJasper = "/TesteGrafico.jasper";JRDataSourcejrDataSourse = newJRBeanArrayDataSource(array.toArray());

    Jasper Print impressao =JasperFillManager.fillReport(pathJasper, params,jrDataSourse);JasperExportManager.exportReportToPdf(impressao,ModeloGrafico.pdf"););

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 54

    Modelo no IReport -> JFreeChart

    A montagemfinal do Modeloficou assim(salvo com o

    nome deModeloGrafico):.

  • 8/6/2019 Java Relatorios

    28/29

    28

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 55

    Modelo no IReport -> JFreeChart

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 56

    Modelo no IReport -> JFreeChart

    JFreeChart pode serusada juntamentecom iReport /JasperReports

    criando relatriosmais completosusando tambmrecursos de criaode grficos.

  • 8/6/2019 Java Relatorios

    29/29

    Maio 08 Prof. Ismael H. F. Santos - [email protected] 57

    Fonte de dados via Hibernate

    Configure o classpath (Options->classpath). Emparticular, todos os itens a seguir devem estardisponveis ao iReport: arquivos de mapeamento (.hbm.xml) arquivos das classes persistentes (.class) arquivo de configurao do Hibernate

    driver JDBC do SGBD a que ser quer ter acesso Aps a configurao do classpath, configure a

    conexo (anloga configurao via JDBC)