Moving Average Jfreechart




Moving Average Jfreechart2009-08-06: liberacao de 0.6.0 e liberada 2009-05-22: liberacao de 0.5.0 e liberada 2009-03-16: liberacao de 0.5.0 beta. 2008-06-20: lancamento de 0.4.1, relancamento do site Wiki e inclusao dos foruns como paginas incorporadas: Forum de Usuarios e Forum de Desenvolvedores. Enjoy 2008-05-04 Appendium Ltd e LavaBlast tem o prazer de anunciar o lancamento da versao 0.4.0 do StatSVN. Mais detalhes sobre este blog e o changelog. 2007-03-10 Noticia. Como parte do lancamento 0.3.1, lancamos uma serie de demos para alguns projetos conhecidos: Subversion, Ant, Log4J, Spring Rich Client, Hibernate 3, Joda Time, Ruby, Groovy, Grails e Felix para comecar. Va em frente, admita, voce sempre quis saber quem fez o que e quando sobre esses projetos. Atencao . Se voce nao estiver usando uma localidade em ingles, defina a variavel de ambiente LANG para enUS ao executar o aplicativo ate resolvermos alguns problemas de i18n com o StatSVN (a chamada para svn diff retorna uma string localizada que pode resultar em alguns resultados nao sendo armazenados em cache, os resultados Estao corretas, mas o StatSVN pedira novamente na proxima vez). 2007-02-07: Quer ajudar Estamos considerando a substituicao de nossas chamadas de linha de comando com chamadas para SVNKit (anteriormente JavaSVN). Queremos escrever a implementacao do prototipo e ver o quao bem ele funciona? Deixe-nos saber 2007-01-12: Versao 0.3.0 esta em SVN e adiciona 2 relatorios (RepoMap e LOCChurn), bem como corrigir uma serie de problemas com arquivos em movimento, diretorios E eliminacao desses. Mais detalhes nesta pagina. 2006-11-28: Versao 0.2.0 esta para fora e suporta agora a geracao de Html e de XDoc para facilitar a integracao com Maven (veja relatorios aqui). Tambem ficamos satisfeitos em mencionar que existe um plugin Maven 2 usando o StatSVN, ele esta disponivel no stat-scm. sourceforge. Tweet Estatisticas do SVN O StatSVN recupera informacoes de um repositorio do Subversion e gera varias tabelas e graficos descrevendo o desenvolvimento do projeto, p. Linha de tempo para as linhas de codigo Linhas de codigo para cada desenvolvedor Atividade por Hora do relogio Autores Atividade Atividade do autor por Modulo Autor Mais recentes Compromete com links para ViewVc Estatisticas por diretorio Numero de arquivos Tamanho medio do arquivo Maiores arquivos Arquivos com a maioria das revisoes Tamanho do diretorio Repositorio Tags Numero de LOC por versao. Arvore de repositorio com contagem de arquivos e linhas de codigo LOC e Churn a evolucao de LOC ea quantidade de mudanca por dia Repo Mapear a visao hierarquica dinamica de seu repo para os ultimos 30 dias A versao atual do StatSVN gera um conjunto estatico de documentos HTML contendo Tabelas e imagens de grafico. O StatSVN e um software de codigo aberto, lancado sob os termos da LGPL, baseado no StatCVS. O StatSVN usa JFreeChart para gerar graficos. Onde esta o manual O manual esta disponivel on-line como um Wiki e e tao atualizado e abrangente como voce quer que ele seja. Exemplo rapido para Maven 1 Antes de executar o site maven (ou simplesmente maven xdoc), voce pode gerar os arquivos XDOC executando: (nao esqueca - v). Este exemplo ira gerar xdoc no diretorio sitestatsvn, tag 0.2.0, 0.1.3, 0.1.2, 0.0.9, excluir qalab. xml e outros. Depois disso, o XDOC seria apanhado pelo site maven ou pelo maven xdoc. Observe que para usar as tags, voce deve usar um arquivo de log nao no nivel do tronco, mas logo acima, para incluir o diretorio de tags. No momento, o StatSVN so funciona com o diretorio tags. Exemplo rapido de novo despejo Existe uma nova facilidade de despejo (nao esqueca - v). Isso ira gerar uma grande quantidade de saida, mas no final isso, se ele mostra OK para tudo, e provavel que o StatSVN entendeu corretamente seu repositorio: JasperReports - Guia Rapido JasperReports - Comecando JasperReports - Ambiente JasperReports - Ciclo de Vida JasperReports - Designs JasperReports - Compilando o Projeto de Relatorios JasperReports - Relatorios de Preenchimento Relatorio Jasper - Relatorios de Impressao de Amperes JasperReports - Exportacao de Relatorios Relatorios Parametros Se definido como java. lang. Boolean. TRUE o relatorio sera gerado em uma pagina longa e nao ocorrera quebra de pagina. Passemos ReportTitle e Author para o relatorio (gerado por JasperReportFill. java). Arquivo revisado C: toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java e como segue minus O conteudo do arquivo POJO C: toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java sao como abaixo minus O conteudo do arquivo C: toolsjasperreports-5.0.1testsrccomtutorialspointDataBeanList. java sao como Dado abaixo menos Permite adicionar parametros ao lt ReportTitle gt e lt Author gt ao nosso modelo de relatorio existente (Chapter Report Designs). O titulo e o autor do relatorio serao exibidos no inicio do relatorio. O modelo de relatorio revisado (jasperreporttemplate. jrxml) e o seguinte. Salve-o em C: toolsjasperreports-5.0.1 diretorio de teste menos Geracao de relatorio Vamos compilar e executar o arquivo acima usando nosso processo regular de construcao ANT. O conteudo do arquivo build. xml (salvo no diretorio C: toolsjasperreports-5.0.1test) sao como abaixo. O arquivo de importacao - baseBuild. xml e escolhido a partir do capitulo Configuracao do Ambiente e deve ser colocado no mesmo diretorio que o build. xml. Em seguida, vamos abrir janela de linha de comando e ir para o diretorio onde build. xml e colocado. Por fim, execute o comando ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport e o destino padrao) da seguinte forma minus Como resultado da compilacao acima, uma janela do JasperViewer se abre como mostrado na seguinte tela menos Aqui, vemos que, a ReportTitle lista de contatos e autor preparado pelo Manisha sao exibidos no inicio do relatorio. Fontes de Dados de Relatorios Fontes de dados sao conteineres de dados estruturados. Ao gerar o relatorio, o mecanismo JasperReports obtem dados dos datasources. Os dados podem ser obtidos nos bancos de dados, arquivos XML, matrizes de objetos e colecao de objetos. Vimos no capitulo Relatorios de preenchimento. O metodo fillReportXXX () espera receber uma fonte de dados do relatorio, que tem de preencher, sob a forma de net. sf. jasperreports. engine. JRDataSource objeto ou um java. sql. Connection (quando os dados do relatorio sao encontrados em um Banco de dados relacional). A interface JRDataSource tem apenas dois metodos, que devem ser implementados menos booleano publico next () lanca JRException No momento de preenchimento do relatorio, esse metodo e chamado no objeto de fonte de dados pelo mecanismo de relatorio ao iterar pelos dados. Public Object getFieldValue (JRField jrField) lanca JRException Esse metodo fornece o valor para cada campo de relatorio no registro de fonte de dados atual. A unica maneira de recuperar dados da fonte de dados e usando os campos de relatorio. Ha varias implementacoes padrao da interface JRDataSource, dependendo da maneira, os registros na fonte de dados sao adquiridos. Implementacoes de Datasource A tabela abaixo resume as datasources e suas classes de implementacao menos JDBC Data Sources Classe JRResultSetDataSource craps um objeto java. sql. ResultSet. Esta e a implementacao de fontes de dados mais comumente usada quando dados de relatorio sao extraidos de um banco de dados relacional. Se um java. sql. Connection e passado para o mecanismo em vez disso, ele executa primeiro a consulta relacionada e armazena o objeto java. sql. ResultSet retornado em uma instancia JRResultSetDataSource. Classes de fontes de dados JavaBean JRBeanArrayDataSource e JRBeanCollectionDataSource representam implementacoes que podem envolver matrizes e colecoes de objetos JavaBean. Cada objeto dentro da matriz ou a colecao sera visto como um registro neste tipo de fonte de dados. O mapeamento entre uma determinada propriedade JavaBean e o campo de relatorio correspondente e feito por convencoes de nomenclatura. O campo do nome do relatorio deve ser o mesmo que o nome da propriedade JavaBean conforme especificado pelas especificacoes do JavaBeans. Em todos os exemplos deste tutorial, usamos JRBeanCollectionDataSource. Fontes de dados baseadas em mapas As classes de implementacao JRMapArrayDataSource e JRMapCollectionDataSource sao uteis se o aplicativo pai ja armazenar os dados de relatorio disponiveis na memoria como objetos java. util. Map. Cada objeto de mapa na matriz ou colecao wrapped e considerado um registro virtual na fonte de dados eo valor de cada campo de relatorio e extraido do mapa usando o campo de relatorio nomeado como a chave. Fontes de Dados TableModel Em muitos aplicativos do lado do cliente, os dados sao exibidos em formato tabular. Um requisito comum em muitas aplicacoes e permitir que o usuario imprima este formato tabular como um relatorio. A classe de implementacao JRTableModelDataSource torna a tarefa de gerar relatorios de formato tabular trivial para aplicativos Swing. Essa classe envolve um objeto javax. swing. table. TableModel. Colunas no objeto TableModel wrapped podem ser acessadas por seus nomes ou por seus indices baseados em 0. Classe de fontes de dados XML JRXmlDataSource e uma implementacao de origem de dados baseada no DOM, que usa expressoes XPath para selecionar dados do documento XML. Registros na origem de dados XML sao representados por elementos de no selecionados atraves da expressao XPath. Os valores de campo sao recuperados de cada registro usando a expressao XPath fornecida pela descricao do campo (elemento ltfieldDescriptiongt em JRXML). XPath e uma linguagem usada para navegar atraves de atributos e elementos de documentos XML. Mais informacoes sobre XPath podem ser encontradas em w3.orgTRxpath. Fontes de dados CSV O JRCsvDataSource representa uma implementacao para fontes de dados, que recuperam seus dados de arquivos de texto estruturados geralmente CSVs. Os valores de campo sao recuperados usando seu indice de coluna. Fontes de dados XLS O JRXlsDataSource representa uma implementacao para fontes de dados, que recuperam seus dados de documentos do Excel. O mapeamento de campo de relatorio para esta implementacao de origem de dados tambem se baseia no indice de coluna de campo. Origens de dados vazias A classe JREmptyDataSource. Simula uma fonte de dados com um dado numero de registros vazios virtuais dentro. Ele e usado pelas ferramentas da interface do usuario para oferecer funcionalidade de visualizacao basica do relatorio, ou em modelos de relatorio especiais, ou para fins de teste e depuracao. Fontes de dados rebobinaveis ??O net. sf. jasperreports. engine. JRRewindableDataSource estende a interface JRDataSource basica. Ele adiciona apenas um metodo, chamado moveFirst (), para a interface. Este metodo destina-se a mover o cursor para o primeiro elemento na origem de dados. Fontes de dados rebobinaveis ??sao uteis quando se trabalha com sub-relatorios colocados dentro de uma banda que nao e permitido dividir devido a configuracao isSplitAllowedfalse e nao ha espaco suficiente na pagina atual para o sub-relatorio a ser processado. Todas as implementacoes de origem de dados acima sao rebobinaveis, exceto para o JRResultSetDataSource. Como ele nao suporta mover o ponteiro de registro para tras. Isso representa um problema somente se essa fonte de dados for usada manualmente para envolver um java. sql. ResultSet antes de passa-lo para o sub-relatorio. Nao ha problema, se a consulta SQL reside no modelo de sub-relatorio, como o mecanismo ira executa-lo novamente ao reiniciar o sub-relatorio na proxima pagina. Provedores de fontes de dados A biblioteca JasperReports tem uma interface net. sf. jasperreports. engine. JRDataSourceProvider. Isso ajuda na criacao e disposicao de objetos de origem de dados. Ao criar um modelo de relatorio usando ferramentas GUI, uma ferramenta especial para personalizar a fonte de dados de relatorios e necessaria. JRDataSourceProvider e a maneira padrao para conectar fontes de dados personalizadas em uma ferramenta de design. Uma implementacao personalizada desta interface deve implementar os seguintes metodos que permitem criar e dispor objetos de fonte de dados e tambem metodos para listar os campos de relatorio disponiveis dentro da fonte de dados, se possivel menos Campos de relatorios Campos de relatorio sao elementos que representam mapeamento de dados entre datasource E modelo de relatorio. Os campos podem ser combinados nas expressoes do relatorio para obter a saida desejada. Um modelo de relatorio pode conter zero ou mais elementos ltfieldgt. Ao declarar campos de relatorio, a fonte de dados deve fornecer dados correspondentes a todos os campos definidos no modelo de relatorio. Declaracao de Campo A declaracao de campo e feita como mostrado abaixo minus O Atributo de Nome O atributo de nome do elemento ltfieldgt e obrigatorio. Faz referencia ao campo em expressoes de relatorio por nome. O atributo de classe O atributo de classe especifica o nome da classe para os valores de campo. Seu valor padrao e java. lang. String. Isso pode ser alterado para qualquer classe disponivel em tempo de execucao. Independentemente do tipo de um campo de relatorio, o mecanismo cuida da moldagem nas expressoes de relatorio em que o token F e usado, tornando desnecessarios os modelos manuais. Campo Descricao O elemento ltfieldDesciptiongt e um elemento opcional. Isso e muito util ao implementar uma fonte de dados personalizada. Por exemplo, podemos armazenar uma chave ou alguma informacao, atraves da qual podemos recuperar o valor do campo da fonte de dados personalizada no tempo de execucao. Usando o elemento ltfieldDesciptiongt em vez do nome do campo, voce pode facilmente superar restricoes de convencoes de nomeacao de campo ao recuperar os valores de campo da fonte de dados. A seguir esta um pedaco de codigo de nosso arquivo JRXML existente (Designs de relatorios de capitulo). Aqui, podemos ver o uso do nome. classe . E elementos fieldDescription. Campos de ordenacao Nos momentos em que a classificacao de dados e necessaria e a implementacao de fonte de dados nao o suporta (por exemplo, fonte de dados CSV), o JasperReports suporta a classificacao de origem de dados baseada em campo na memoria. A classificacao pode ser feita usando um ou mais elementos ltsortFieldgt no modelo de relatorio. Se pelo menos um campo de classificacao for especificado, durante o processo de preenchimento do relatorio, a fonte de dados sera passada para uma instancia do JRSortableDataSource. Isso, por sua vez, obtem todos os registros da origem de dados, executa na classificacao de memoria de acordo com os campos especificados e substitui a origem de dados original. O nome do campo de classificacao deve ser identico ao nome do campo do relatorio. Campos utilizados para classificacao devem ter tipos que implementam java. utilparable. A classificacao de ordem natural e executada para todos os campos, exceto os do tipo java. lang. String (para o tipo String, o collator correspondente ao local de preenchimento do relatorio e usado). Quando sao especificados varios campos de ordenacao, a ordenacao sera executada utilizando os campos como chaves de ordenacao na ordem em que aparecem no modelo de relatorio. O exemplo a seguir demonstra o recurso de classificacao. Sorted Report Example Permite adicionar o elemento lt sortField gt ao nosso modelo de relatorio existente (desenhos de relatorios de capitulo). Permite ordenar o pais do campo em ordem decrescente. O modelo de relatorio revisado (jasperreporttemplate. jrxml) e o seguinte. Salve-o em C: toolsjasperreports-5.0.1 diretorio de teste menos Os codigos java para preenchimento de relatorio permanece inalterado. O conteudo do arquivo C: toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java sao como dados abaixo minus O conteudo do arquivo POJO C: toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java sao como dados abaixo minus O conteudo do arquivo C: toolsjasperreports-5.0. 1testsrccomtutorialspointDataBeanList. java sao como dados abaixo menos geracao de relatorio Vamos compilar e executar o arquivo acima usando nosso processo regular de construcao ANT. O conteudo do arquivo build. xml (salvo no diretorio C: toolsjasperreports-5.0.1test) sao os dados abaixo. O arquivo de importacao - baseBuild. xml e escolhido do capitulo Configuracao do Ambiente e deve ser colocado no mesmo diretorio que o build. xml. Em seguida, vamos abrir janela de linha de comando e ir para o diretorio onde build. xml e colocado. Finalmente, execute o comando ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport e o destino padrao) da seguinte forma minus Como resultado da compilacao acima, uma janela do JasperViewer se abre como mostrado na tela abaixo abaixo Aqui, podemos ver que Os nomes dos paises sao organizados em ordem decrescente em ordem alfabetica. As expressoes Report Expression Report sao os poderosos recursos do JasperReports, que nos permitem exibir dados calculados em um relatorio. Dados calculados sao os dados que nao sao dados estaticos e nao sao passados ??especificamente como um parametro de relatorio ou campo de fonte de dados. As expressoes de relatorio sao construidas a partir da combinacao de parametros de relatorio, campos e dados estaticos. A linguagem Java e usada para escrever expressoes de relatorio por padrao. Outros linguagens de script para expressoes de relatorio como linguagem de script Groovy, JavaScript ou script BeanShell sao suportados por compiladores do JasperReports. Este capitulo ira explicar-lhe menos como funcionam as expressoes de relatorio, supondo que tenham sido escritas utilizando apenas a linguagem Java. Em um modelo de relatorio JRXML, existem varios elementos que definem expressoes como menos ltvariableExpressiongt ltinitialValueExpressiongt ltgroupExpressiongt ltprintWhenExpressiongt ltimageExpressiongt lttextFieldExpressiongt Expressao Declaracao Basicamente, todas as expressoes de relatorio sao expressoes Java, que podem fazer referencia aos campos de relatorio, variaveis ??de relatorio e parametros de relatorio. Referencia de campo na expressao Para usar uma referencia de campo de relatorio em uma expressao, o nome do campo deve ser colocado entre F e sequencias de caracteres, como mostrado abaixo. - Seguir e um pedaco de codigo de nosso arquivo JRXML existente Referencia em Expression Para referenciar uma variavel em uma expressao, devemos colocar o nome da variavel entre V e como mostrado no exemplo abaixo. Minus Referencia de parametro em Expression Para fazer referencia a um parametro em uma expressao, o nome do parametro deve ser colocado Entre P e como mostrado no exemplo abaixo abaixo Seguir e um pedaco de codigo de nosso arquivo JRXML existente, que demonstra o referenciamento de parametro em uma expressao. (JRXML from Chapter Report Designs) minus Como voce viu acima, as referencias de parametro, campo e variavel sao de fato objetos Java reais. Conhecendo sua classe a partir da declaracao de parametro, campo ou variavel feita no modelo de relatorio, podemos ate chamar metodos nessas referencias de objeto nas expressoes. O exemplo a seguir mostra menos como extrair e exibir a primeira letra do campo de relatorio java. lang. String Nome menos Referencia do conjunto de recursos na expressao Para fazer referencia a um recurso em uma expressao, a chave deve ser colocada entre R e conforme mostrado no exemplo fornecido Abaixo menos Com base na localidade fornecida pelo tempo de execucao e na chave report. title, o bundle de recursos associado ao modelo de relatorio e carregado. Assim, o titulo do relatorio e exibido extraindo o valor String do bundle de recursos. Mais informacoes sobre internacionalizacao podem ser encontradas no capitulo Internacionalizacao. Calculadora A Calculadora e uma entidade no JasperReports, que avalia expressoes e incrementa variaveis ??ou conjuntos de dados no momento do preenchimento do relatorio. Durante o processo de compilacao, as informacoes sao produzidas e armazenadas no relatorio de compilacao pelo compilador. Essas informacoes sao usadas durante o tempo de preenchimento do relatorio para criar uma instancia da classe net. sf. jasperreports. engine. fill. JRCalculator. O arquivo de origem Java e gerado e compilado por compiladores de relatorios baseados em Java. Essa classe gerada e uma subclasse do JRCalculator eo bytecode produzido pela compilacao e armazenado dentro do objeto JasperReport. Esse bytcode e carregado no tempo de preenchimento do relatorio e a classe resultante e instanciada para obter o objeto calculador necessario para a avaliacao da expressao. Expressoes Condicionais O JasperReports nao suporta declaracoes if-else ao definir expressoes variaveis. Em vez disso, voce pode usar os operadores ternarios. . . Esse operador pode ser aninhado dentro de uma expressao Java para obter a saida desejada com base em varias condicoes. Exemplo de expressoes condicionais no relatorio Permite modificar o modelo de relatorio existente (Designs de relatorios de capitulo) e adicionar uma expressao condicional para o pais de campo. O modelo de relatorio revisado (jasperreporttemplate. jrxml) e o seguinte. Salve-o em C: toolsjasperreports-5.0.1 diretorio de teste menos Os codigos java para preenchimento de relatorio sao os seguintes. O conteudo do arquivo C: toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java sao como menos O conteudo do arquivo POJO C: toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java sao como menos Vamos adicionar um novo registro com campo country como vazio em nosso Java bean Lista. O conteudo do arquivo C: toolsjasperreports-5.0.1testsrccomtutorialspointDataBeanList. java sao como menos Report Generation Vamos compilar e executar o arquivo acima usando o nosso processo regular de construcao ANT. O conteudo do arquivo build. xml (salvo no diretorio C: toolsjasperreports-5.0.1test) e dado abaixo. O arquivo de importacao - baseBuild. xml e escolhido do capitulo Configuracao do Ambiente e deve ser colocado no mesmo diretorio que o build. xml. Em seguida, vamos abrir janela de linha de comando e ir para o diretorio onde build. xml e colocado. Finalmente, execute o comando ant - Dmain-class com. tutorialspoint. JasperReportFill (viewFullReport e o destino padrao) como menos Como resultado da compilacao acima, uma janela JasperViewer se abre como mostrado na tela abaixo abaixo Aqui, podemos ver, Para o ultimo registro, nao tinhamos passado quaisquer dados para o pais de campo, NENHUM PAIS esta sendo impresso. Variaveis ??de relatorio As variaveis ??de relatorio sao objetos especiais construidos na parte superior da expressao do relatorio. As variaveis ??de relatorio simplificam as seguintes tarefas menos expressoes de relatorio, que sao fortemente utilizadas em todo o modelo de relatorio. Essas expressoes podem ser declaradas apenas uma vez usando as variaveis ??de relatorio. As variaveis ??de relatorio podem executar varios calculos com base nos valores de expressoes correspondentes, como contagem, soma, media, menor, maior, variancia, etc. Se as variaveis ??forem definidas em um design de relatorio, estas podem ser referenciadas por novas variaveis ??nas expressoes. Assim, a ordem em que as variaveis ??sao declaradas em um projeto de relatorio e importante. Declaracao de variavel Uma declaracao de variavel e a seguinte minus Como visto acima, o elemento ltvariablegt contem o numero de atributos. Esses atributos sao resumidos a seguir menos The Name Attribute Similar to parameters and fields. O atributo name do elemento ltvariablegt e obrigatorio. Permite referenciar a variavel pelo seu nome declarado nas expressoes do relatorio. O atributo de classe O atributo de classe tambem e obrigatorio que especifica o nome da classe para os valores da variavel. Seu valor padrao e java. lang. String. Isso pode ser alterado para qualquer classe disponivel no classpath, tanto no momento da compilacao do relatorio quanto no tempo de preenchimento do relatorio. O motor cuida do tipo de fundicao em expressoes de relatorio que o token V e usado, portanto, a fundicao de tipo manual nao e necessaria. Calculo Este atributo determina menos o calculo a executar na variavel ao preencher o relatorio. As subsecoes a seguir descrevem todos os valores possiveis para o atributo de calculo do elemento ltvariablegt. Media menos O valor da variavel e a media de cada valor nao nulo da expressao da variavel. Valido apenas para variaveis ??numericas. Contagem menos O valor da variavel e a contagem de instancias nao nulas da expressao da variavel. Primeiro menos O valor da variavel e o valor da primeira instancia da expressao da variavel. Valores subsequentes sao ignorados. Maior menos O valor da variavel e o valor mais alto para a expressao da variavel. Menor menos O valor da variavel e o valor mais baixo para a expressao da variavel no relatorio. Nada menos Nenhum calculo e realizado na variavel. StandardDeviation menos O valor da variavel e o desvio padrao de todos os valores nao nulos que correspondem a expressao do relatorio. Valido apenas para variaveis ??numericas. Soma menos O valor da variavel e a soma de todos os valores nao nulos retornados pela expressao do relatorio. Sistema menos O valor da variavel e um calculo personalizado (calculando o valor para essa variavel voce mesmo, usando a funcionalidade scriptlets do JasperReports). Variancia menos O valor da variavel e a variancia de todos os valores nao nulos retornados pela avaliacao da expressao das variaveis ??de relatorio. Incrementer FactoryClass Esse atributo determina a classe usada para calcular o valor da variavel ao preencher o registro atual no relatorio. O valor padrao seria qualquer classe implementando net. sf. jasperreports. engine. fill. JRIncrementerFactory. A classe de fabrica sera usada pelo mecanismo para instanciar objetos de incremento em tempo de execucao, dependendo do atributo de calculo definido para a variavel. IncrementType Isso determina quando recalcular o valor da variavel. Este atributo utiliza valores, como abaixo menos Coluna menos O valor da variavel e recalculado no final de cada coluna. Grupo menos O valor da variavel e recalculado quando o grupo especificado pelo incrementoGroup muda. Nenhum menos O valor da variavel e recalculado com cada registro. Page minus O valor da variavel e recalculado no final de cada pagina. Relatorio minus O valor da variavel e recalculado uma vez, no final do relatorio. IncrementGroup Isso determina o nome do grupo no qual o valor da variavel e recalculado, quando incrementType for Group. Isso leva o nome de qualquer grupo declarado no modelo de relatorio JRXML. Isso determina quando o valor de uma variavel e redefinido. Esse atributo usa valores, como abaixo menos Coluna menos O valor da variavel e redefinido no inicio de cada coluna. Grupo menos O valor da variavel e redefinido quando o grupo especificado pelo incrementoGroup muda. Nenhum menos O valor da variavel nunca e redefinido. Page minus O valor da variavel e reposto no inicio de cada pagina. Relatorio minus O valor da variavel e reposto apenas uma vez, no inicio do relatorio. ResetGroup Isso determina o nome do grupo no qual o valor da variavel e redefinido, quando resetType for Group. Os valores para esse atributo seriam o nome de qualquer grupo declarado no modelo de relatorio JRXML. Variaveis ??de relatorio incorporadas Existem algumas variaveis ??de sistema integradas, prontas para usar em expressoes, da seguinte forma minus Variavel Nome e Descricao Este valor de variaveis ??e o numero da pagina atual. Ele pode ser usado para exibir o numero da pagina atual eo numero total de paginas usando uma caracteristica especial dos elementos de campo de texto JasperReports, o atributo evaluationTime. O nome dessa variavel e derivado do nome do grupo ao qual ele corresponde, sufixado com a sequencia COUNT. Esta variavel contem o numero de registros no grupo atual. Permite adicionar uma variavel (countNumber) ao nosso modelo de relatorio existente (Designs de Relatorios de Capitulos). Iremos prefixar a contagem para cada registro. O modelo de relatorio revisado (jasperreporttemplate. jrxml) e o seguinte. Salve-o em C: toolsjasperreports-5.0.1 diretorio de teste menos Os codigos java para preenchimento de relatorio permanece inalterado. O conteudo do arquivo C: toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java sao como dados abaixo minus O conteudo do arquivo POJO C: toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java sao como dados abaixo minus O conteudo do arquivo C: toolsjasperreports-5.0. 1testsrccomtutorialspointDataBeanList. java sao como dados abaixo menos Report Generation Vamos compilar e executar o arquivo acima usando nosso processo regular de construcao ANT. O conteudo do arquivo build. xml (salvo no diretorio C: toolsjasperreports-5.0.1test) sao os dados abaixo. O arquivo de importacao - baseBuild. xml e escolhido a partir do capitulo Configuracao do Ambiente e deve ser colocado no mesmo diretorio que o build. xml. Em seguida, vamos abrir janela de linha de comando e ir para o diretorio onde build. xml e colocado. Por fim, execute o comando ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport e o destino padrao) como menos Como resultado da compilacao acima, uma janela JasperViewer abre como na tela abaixo menos Aqui, vemos que a contagem e prefixada Para cada registro. Secoes de Relatorio Discutimos a estrutura de um modelo de relatorio simples no capitulo Primeiros passos. Em linhas semelhantes, o JasperReports estrutura o modelo de relatorio em varias secoes. As secoes sao partes do relatorio que tem uma altura especificada e podem conter objetos de relatorio como linhas, retangulos, imagens ou campos de texto. O mecanismo de relatorio itera atraves dos registros virtuais da fonte de dados de relatorio fornecida, no momento do preenchimento do relatorio. Dependendo do comportamento definido por cada secao, o mecanismo processa cada secao de relatorio quando apropriado. Por exemplo, a secao de detalhes e processada para cada registro na fonte de dados. Quando quebras de pagina ocorrem, as secoes de cabecalho de pagina e rodape de pagina sao processadas conforme necessario. No JasperReports, terminologia e secoes de relatorio tambem sao chamados como bandas de relatorio. As secoes sao constituidas por uma ou mais faixas. Essas secoes sao preenchidas repetidamente no momento da geracao do relatorio e preparam o documento final. Secoes Principais Um modelo de relatorio no JasperReports tem as seguintes secoes principais menos A tabela a seguir resume cada uma das secoes menos Altura da secao especifica a altura em pixels para essa secao especifica e e muito importante no projeto geral do relatorio. Print When Expression Uma expressao booleana que determina se a secao deve ser impressa ou nao. Split Allowed Uma bandeira indicando se a secao pode ser dividida quando nao cabe na pagina atual. Se true, a secao sera transferida para a proxima pagina. Observe que no caso, a secao nao se encaixa na proxima pagina, entao a secao sera dividida independentemente do valor de sinalizadores. SplitType pode ter os seguintes valores minus splitTypeStretch: Divide o conteudo esticado. Se a secao se estica na pagina atual (se o espaco disponivel for menor que a altura declarada), a regiao que e adicionada a altura original e permitida para dividir na proxima pagina. SplitTypePrevent: Prevencao de divisao na primeira tentativa. Se a secao nao se encaixa na proxima pagina, a divisao ocorre normalmente, uma vez que a prevencao de divisao de banda e efetiva somente na primeira tentativa de divisao. SplitTypeImmediate: Dividir imediatamente. A banda e permitida para dividir em qualquer lugar, exceto acima, o seu elemento mais alto. Para demonstrar cada secao, vamos gravar o modelo de relatorio (jasperreporttemplate. jrxml). Salve este arquivo no diretorio C: toolsjasperreports-5.0.1test. Neste arquivo, estariamos exibindo um texto em cada uma das secoes (discutimos acima). O conteudo do arquivo e como indicado abaixo minus O codigo java para preencher e gerar o relatorio e dado abaixo. Permite salvar este arquivo JasperReportFill. java para o diretorio C: toolsjasperreports-5.0.1testsrccomtutorialspoint. Aqui, usamos uma instancia de JREmptyDataSource ao preencher relatorios para simular uma fonte de dados com um registro nele, mas com todos os campos neste unico registro sendo nulo. Geracao de Relatorios Vamos compilar e executar o arquivo acima usando nosso processo regular de criacao de ANT. O conteudo do arquivo build. xml (salvo no diretorio C: toolsjasperreports-5.0.1test) sao como abaixo. O arquivo de importacao - baseBuild. xml e apanhado a partir do capitulo Configuracao do Ambiente e deve ser colocado no mesmo diretorio que o build. xml. Em seguida, vamos abrir janela de linha de comando e ir para o diretorio onde build. xml e colocado. Finalmente, execute o comando ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport e o destino padrao) da seguinte forma minus Como resultado da compilacao acima, uma janela do JasperViewer se abre como na tela abaixo menos Aqui, podemos ver em cada um dos the sections a text is printed. It is to be noted that as JRXML contains a ltlastPageFootergt element, it will be displayed in the last page of the report instead of the ltpageFootergt element being displayed. The ltcolumnHeadergt and ltcolumnFootergt elements will only be displayed on the report, if it has more than one column. Report Groups Groups in JasperReports help to organize data on report in a logical manner. A report group represents a sequence of consecutive records in the data source, which have something in common, such as the value of a certain report fields. A report group is defined by the ltgroupgt element. A report can have any number of groups. Once declared, groups can be referred throughout the report. A report group has three elements minus Group expression minus This indicates the data that must change to start a new data group. Group header section minus Helps place label at the beginning of the grouped data. Group footer section minus Helps place label at the end of the grouped data. During the iteration through the data source at report-filling time if the value of the group expression changes, a group rupture occurs and the corresponding ltgroupFootergt and ltgroupHeadergt sections are inserted in the resulting document. Report group mechanism does not perform any sorting on the data supplied by the data source. Data grouping works as expected only when the records in the data source are already ordered according to the group expressions used in the report. Group Attributes The ltgroupgt element contains attributes that allow us to control how grouped data is laid out. The attributes are summarized in table below minus Attribute and Description This is mandatory. It references the group in report expressions by name. It follows the same naming conventions that we mentioned for the report parameters, fields, and report variables. It can be used in other JRXML attributes when you want to refer a particular report group. When set to true . each data group will begin on a new column. Default value is false . When set to true . prevents the group from splitting on its first break attempt. Lets add a group ( CountryGroup ) to existing report template (Chapter Report Designs ). Occurrence of each country is counted and the count is displayed as the group footer. In the group header, the count of each record is prefixed. The revised report template (jasperreporttemplate. jrxml) is as follows. Save it to C:toolsjasperreports-5.0.1test directory minus The java codes for report filling remains unchanged. The contents of the file C:toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java are as given below minus The contents of the POJO file C:toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java are as below minus The contents of the file C:toolsjasperreports-5.0.1testsrccomtutorialspointDataBeanList. java are as given below minus Report Generation We will compile and execute the above file using our regular ANT build process. The contents of the file build. xml (saved under directory C:toolsjasperreports-5.0.1test) are as below. The import file - baseBuild. xml is picked up from chapter Environment Setup and should be placed in the same directory as the build. xml. Next, lets open command line window and go to the directory where build. xml is placed. Finally, execute the command ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport is the default target) as minus As a result of above compilation, a JasperViewer window opens up as in the screen below minus Here, we see that the each country is grouped and the count of occurrence of each country is displayed at the footer of each group. Report Fonts A report contains text elements and each of these can have its own font settings. These settings can be specified using the lt font gt tag available in the lttextElementgt tag. A report can define a number of fonts. Once defined, they can be used as default or base font settings for other font definitions throughout the entire report. Report Fonts A report font is a collection of font settings, declared at the report level. A report font can be reused throughout the entire report template when setting the font properties of text elements. Report fonts are now deprecated. Do not use ltreportFontgt elements declared within the document itself. Use the ltstylegt element instead. Font Attributes Table below summarizes the main attributes of the lt font gt element minus The flag that specifies whether the font should be embedded into the document itself. It defaults to false. If set to true, helps view the PDF document without any problem. Font Types In JasperReports fonts can be categorized as minus Logical Fonts minus Five font types, which have been recognized by the Java platform since version 1.0, are called logical fonts. These are minus Serif, SansSerif, Monospaced, Dialog, and DialogInput . These logical fonts are not actual font libraries that are installed anywhere on the system. They are merely font type names recognized by the Java runtime. These must be mapped to some physical font that is installed on the system. Physical Fonts minus These fonts are the actual font libraries consisting of, for example, TrueType or PostScript Type 1 fonts. The physical fonts may be Arial, Time, Helvetica, Courier, or any number of other fonts, including international fonts. Font Extensions minus The JasperReports library can make use of fonts registered on-the-fly at runtime, through its built-in support for font extensions. A list of font families can be made available to the JasperReports using font extension. These are made out of similarly looking font faces and supporting specific locales. As described in the table above we need to specify in the attribute fontName the name of a physical font, the name of a logical font, or the name of a font family from the registered JasperReports font extensions. PDF Font Name JasperReports library uses the iText library, when exporting reports to PDF(Portable Document Format). PDF files can be viewed on various platforms and will always look the same. This is partially because in this format, there is a special way of dealing with fonts. fontName attribute is of no use when exporting to PDF. Attribute pdfFontName exist where we need to specify the font settings. The iText library knows how to deal with built-in fonts and TTF files and recognizes the following built-in font names minus Courier Courier-Bold Courier-BoldOblique Courier-Oblique Helvetica Helvetica-Bold Helvetica-BoldOblique Helvetica-Oblique Symbol Times-Roman Times-Bold Times-BoldItalic Times-Italic ZapfDingbats As per iText library pre-requisite, to work with fonts, we need to specify one of the following as the font name minus A built-in font name from the above list. The name of a TTF (True Type Font) file, which it can locate on disk. The real name of the font, provided that the TTF file containing the font has been previously registered with iText or that an alias was defined when the font was registered. Based on the above pre-requisites, the pdfFontName attribute can contain one of the following values minus The name of a built-in PDF font from the above list. The name of a TTF file that can be located on disk at runtime when exporting to PDF. The real name of a registered font. The suffix of the key (the part after net. sf. jasperreports. export. pdf. font ) for a font registered with iText as a font file. Default Fonts and Inheritance Each text element inherits font and style attributes from its parent element, which in turn inherits these attributes from its parent. If no styles andor fonts are defined for elements, the default style (andor font - but this is now deprecated) declared in the ltjasperReportgt root element will be applied. Defining default styles or fonts in JasperReports is not mandatory. If no font is defined for a given element, the engine looks either for the inherited font attributes, or, if no attributes are found on this way, it looks for the net. sf. jasperreports. default. font. name property in the srcdefault. jasperreports. properties file. Its value defines the name of the font family to be used when font properties are not explicitly defined for a text element or inherited from its parent. The main default font properties and their values defined in the srcdefault. jasperreports. properties file are in the table below minus By default PDF fonts are not embedded. To demonstrate using fonts and font attributes in order to get a particular text appearance, lets write new report template (jasperreporttemplate. jrxml). The contents of the JRXML are as below. Save it to C:toolsjasperreports-5.0.1test directory. Here, we will display a text in the title of the report in various font formats. The java code to fill and generate the report is as given below. Lets save this file JasperFontsReportFill. java to C:toolsjasperreports-5.0.1testsrccomtutorialspoint directory. Here, we use an instance of JREmptyDataSource when filling reports to simulate a data source with one record in it, but with all the fields being null . Report Generation We will compile and execute the above file using our regular ANT build process. The contents of the file build. xml (saved under directory C:toolsjasperreports-5.0.1test) are as given below. The import file - baseBuild. xml is picked from chapter Environment Setup and should be placed in the same directory as the build. xml. Next, lets open command line window and go to the directory where build. xml is placed. Finally, execute the command ant - Dmain-classcom. tutorialspoint. JasperFontsReportFill (viewFullReport is the default target) as minus As a result of above compilation, a JasperViewer window opens up as shown in the screen given below minus Here, we can see that the text Welcome to TutorialsPoint is displayed in different font formats. Unicode Support In JasperReports, working with texts needs some dedicated tools to process both the character representations and the text formatting properties. Any text can be considered as a character sequence with a particular representation structure. The text appearance consists in both layout (and paragraph) and font settings. But while in most cases, the text layout remains invariant, font settings may change when running the report in different Locales. We know that different languages need different character sets with respect to specific characters representation. Therefore, working with texts means working with fonts. However, a detailed discussion about how to use fonts in JasperReports is available in the chapter Report Fonts . One of the main features concerning the text content in a given report is the possibility to internationalize it. It means, we can run the report in different localized environments, using different languages and other localization settings without any hardcoded modification. Character encoding is an important feature when a report is intended to be internationalized. Character Encoding A character is the smallest unit of writing conveying a meaningful information. It is an abstract concept, a character does not have a visual appearance. Uppercase Latin A is a different character from lowercase Latin a and from uppercase Cyrillic A and uppercase Greek Alpha. A visual representation of a character is known as a glyph . A certain set of glyphs is called a font . Uppercase Latin A, uppercase Cyrillic A and uppercase Greek Alpha may have identical glyphs, but they are different characters. At the same time, the glyphs for uppercase Latin A can look very different in Times New Roman, Gill Sans and Poetica chancery italic, but they still represent the same character. The set of available characters is called a character repertoire . The location (index) of a given character within a repertoire is known as its code position, or code point. The method of numerically representing a code point within a given repertoire is called the character encoding . Encodings are normally expressed in terms of octets. An octet is a group of eight binary digits, i. e. eight ones and zeros. An octet can express a numeric range between 0 and 255, or between 0x00 and 0xFF, to use hexadecimal notation. A Unicode is a character repertoire that contains most of the characters used in the languages of the world. It can accommodate millions of characters, and already contains hundreds of thousands. Unicode is divided into planes of 64K characters. The only one used in most circumstances is the first plane, known as the basic multilingual plane, or BMP. UTF-8 is the recommended encoding. It uses a variable number of octets to represent different characters. In a JRXML file, the encoding attribute is specified in the header. It is used at report compilation time to decode the XML content. For instance, if the report contains French words only and characters such as ccedil, eacute, acirc, then the ISO-8859-1 (a. k.a Latin-1) encoding is sufficient minus As seen above, ideally we can choose the encoding fit to the minimal character set, which can correctly represent all the characters in the document. But in case of Multilanguage documents (i. e. documents containing words spelled in several languages), one should choose the encoding adapted to the minimal character set, able to correctly represent all the characters in the document, even if they belong to different languages. One of the character encodings able to handle multilingual documents is the UTF-8 . used as default encoding value by JasperReports. The texts are usually kept in resource bundle files rather than within the document during internationalization. So, there are cases where the JRXML itself looks completely ASCII-compatible, but generated reports at runtime do contain texts unreadable with ASCII. As a result, for a certain type of document export formats (such as CSV, HTML, XHTML, XML, and text) one has to know the encoding for the generated document too. Different languages are supported by different character encodings. So each time, we need to run a report in a localized environment. Further, we have to know, which is the most appropriate character encoding for the generated document language. In this case, the encoding property defined in the JRXML file itself might be no more useful. To solve this kind of issues we can use an export customer property known as net. sf. jasperreports. export. character. encoding . This export custom property is default to UTF-8 and is present in JasperReports. This default value is set in the default. jasperreports. properties file. For more specific options at export time, the CHARACTERENCODING export parameter is also available. To demonstrate using unicode support in Jasperreports, lets write new report template (jasperreporttemplate. jrxml). Save it to C:toolsjasperreports-5.0.1test directory. Here, we will display a text in different languages using the Unicode characters (uXXXX). Any character encoded with UTF-8 can be represented using only its 4-digits hexadecimal code. For instance, the Greek letter can be written as u0393. When such a notation is encountered, the engine calls for the appropriate character representation in the character set, and only that particular character will be printed out. The contents of the JRXML are as below minus In the above file, we can see the presence of the UTF-8 encoding. Also the localized Unicode pieces of text are stored in document parameters. The java code to fill and generate the report is as below. Lets save this file JasperUnicodeReportFill. java to C:toolsjasperreports-5.0.1testsrccomtutorialspoint directory. Here we use an instance of JREmptyDataSource when filling reports to simulate a data source with one record in it, but with all the fields in this single record being null . Report Generation We will compile and execute the above file using our regular ANT build process. The contents of the file build. xml (saved under directory C:toolsjasperreports-5.0.1test) are as below. The import file - baseBuild. xml is picked from chapter Environment Setup and should be placed in the same directory as the build. xml. Next, lets open command line window and go to the directory where build. xml is placed. Finally, execute the command ant - Dmain-classcom. tutorialspoint. JasperUnicodeReportFill (viewFullReport is the default target) as follows minus As a result of above compilation, a JasperViewer window opens up as shown in the screen given below minus Here, we can see that the text being displayed is in different languages. Also we see that the languages are grouped together on the same page and also mixed into the same text element. Report Styles JasperReports has a feature ltstylegt which helps to control text properties in a report template. This element is a collection of style settings declared at the report level. Properties like foreground color, background color, whether the font is bold, italic, or normal, the font size, a border for the font, and many other attributes are controlled by ltstylegt element. Styles can extend other styles, and add to, or override properties of the parent style as well. Style Properties A ltstylegt element has many attributes. Some of the most commonly used are listed in the table given below minus Attribute and Description Conditional Styles In some situations, a style should be applied only when certain condition is met (for example, to alternate adjacent row colors in a report detail section). This can be achieved using conditional styles. A conditional style has two elements minus a Boolean condition expression a style The style is used only if the condition evaluates to true . Applying Styles to Report Elements Any type of report element can reference a report style definition using the style attribute. Hence, all the style properties declared by the style definition that are applicable to the current element will be inherited. To override the inherited values, style properties specified at the report element level can be used. Style Templates We can make a set of reports with a common look by defining the style at a common place. This common style template can then be referenced by the report templates. A style template is an XML file that contains one or more style definitions. Style template files used by convention the. jrtx extension, but this is not mandatory. A style template contains following elements minus ltjasperTemplategt minus This is the root element of a style template file. lttemplategt minus This element is used to include references to other template files. The contents of this element are interpreted as the location of the referred template file. ltstylegt minus This element is identical to the element with the same name from report design templates (JRXML files), with the exception that a style in a style template cannot contain conditional styles. This limitation is caused by the fact that conditional styles involve report expressions, and expressions can only be interpreted in the context of a single report definition. References to style templates are included in JRXML reports as lttemplategt elements. The style templates are loaded at report fill time, and style name references are resolved once all the templates have been loaded. When loading style templates and resolving style names to styles, a treegraph of style templates is created, the top of the tree being the set of styles defined in the report. On this tree, style name references are resolved to the last style that matches the name in a depth-first traversal. Lets try out the conditional styles and style templates. Lets add the lt style gt element alternateStyle to our existing report template (Chapter Report Designs ). Based on the condition, font color changes to blue for even count. We have also included a style template styles. jrtx . The revised report template (jasperreporttemplate. jrxml) is as follows. Save it to C:toolsjasperreports-5.0.1test directory minus The contents of style template styles. jrtx are as follows. Save it to C:toolsjasperreports-5.0.1test directory. The java codes for report filling remain unchanged. The contents of the file C:toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java are as given below minus The contents of the POJO file C:toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java are as below minus The contents of the file C:toolsjasperreports-5.0.1testsrccomtutorialspointDataBeanList. java are as below minus Report Generation We will compile and execute the above file using our regular ANT build process. The contents of the file build. xml (saved under directory C:toolsjasperreports-5.0.1test) are as given below. The import file - baseBuild. xml is picked up from the chapter Environment Setup and should be placed in the same directory as the build. xml. Next, lets open command line window and go to the directory where build. xml is placed. Finally, execute the command ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport is the default target) as minus As a result of above compilation, a JasperViewer window opens up as shown in the screen given below minus Here, we can see that the color of the font is changed to blue for even count (in column country). In the column name, the font color is changed to green (this style is referenced from the style template). Report Scriptlets We have seen in our previous chapters, data displayed on the report is usually fetched from report parameters and report fields. This data can be processed using the report variables and their expressions. There are situations when a complex functionality cannot be achieved easily using report expressions or variables. Examples of this may be complex String manipulations, building of Maps, or Lists of objects in memory or manipulations of dates using 3rd party Java APIs. For such situations, JasperReports provides us with a simple and powerful means of doing this with Scriptlets . Scriptlets are sequences of Java code that are executed every time a report event occurs. Values of report variables can be affected through scriptlets. Scriptlet Declaration We can declare a scriptlet in two ways minus Using lt scriptlet gt element. This element has name attribute and class attribute. The class attribute should specify the name of the class, which extends JRAbstractScriptlet class. The class must be available in the classpath at report filling time and must have an empty constructor, so that the engine can instantiate it on the fly. Using the attribute scriptletClass of the element lt jasperReport gt, in the report template (JRXML). By setting this attribute with fully qualified name of scriptlet (including the entire package name), we indicate that we want to use a scriptlet. The scriptlet instance, created with this attribute, acts like the first scriptlet in the list of scriptlets and has the predefined name REPORT. Scriptlet class A scriptlet is a java class, which must extend either of the following classes minus net. sf. jasperreports. engine. JRAbstractScriptlet minus This class contains a number of abstract methods that must be overridden in every implementation. These methods are called automatically by JasperReports at the appropriate moment. Developer must implement all the abstract methods. net. sf. jasperreports. engine. JRDefaultScriptlet minus This class contains default empty implementations of every method in JRAbstractScriptlet. A developer is only required to implement those methods heshe needs for hisher project. The following table lists the methods in the above class. These methods will be called by the report engine at the appropriate time, during report filling phase. Method and Description public void afterDetailEval() Called after each record in the detail section of the report is evaluated. Any number of scriptlets can be specified per report. If no scriptlet is specified for a report, the engine still creates a single JRDefaultScriptlet instance and registers it with the built-in REPORTSCRIPTLET parameter. We can add any additional methods that we need to our scriptlets. Reports can call these methods by using the built-in parameter REPORTSCRIPTLET. Global Scriptlets We can associate scriptlets in another way to reports, which is by declaring the scriptlets globally. This makes the scriptlets apply to all reports being filled in the given JasperReports deployment. This is made easy by the fact that scriptlets can be added to JasperReports as extensions. The scriptlet extension point is represented by the net. sf. jasperreports. engine. scriptlets. ScriptletFactory interface. JasperReports will load all scriptlet factories available through extensions at runtime. Then, it will ask each one of them for the list of scriptlets instances that they want to apply to the current report that is being run. When asking for the list of scriptlet instances, the engine gives some context information that the factory could use in order to decide, which scriptlets actually apply to the current report. Report Governors Governors are just an extension of global scriptlets that enable us to tackle a problem of report engine entering infinite loop at runtime, while generating reports. Invalid report templates cannot be detected at design time, because most of the time, the conditions for entering the infinite loops depend on the actual data that is fed into the engine at runtime. Report Governors help in deciding whether a certain report has entered an infinite loop and they can stop it. This prevents resource exhaustion for the machine that runs the report. JasperReports has two simple report governors that would stop a report execution based on a specified maximum number of pages or a specified timeout interval. They are minus net. sf. jasperreports. governors. MaxPagesGovernor minus This is a global scriptlet that is looking for two configuration properties to decide if it applies or not to the report currently being run. The configuration properties are minus net. sf. jasperreports. governors. TimeoutGovernor minus This is also a global scriptlet that is looking for the following two configuration properties to decide if it applies or not. The configuration properties are minus The properties for both governors can be set globally, in the jasperreports. properties file, or at report level, as custom report properties. This is useful because different reports can have different estimated size or timeout limits and also because you might want turn on the governors for all reports, while turning it off for some, or vice-versa. Lets write a scriptlet class ( MyScriptlet ). The contents of file C:toolsjasperreports-5.0.1testsrccomtutorialspointMyScriptlet. java are as follows minus Details of the above scriptlet class are as follows minus In the afterReportInit method, we set a value to the variable someVar this. setVariableValue(someVar, new String(This variable value was modified by the scriptlet.)). At the end of the class, an extra method called hello has been defined. This is an example of a method that can be added to the Scriptlet that actually returns a value, rather than setting a Variable. Next, we will add the scriptlet class reference in our existing report template (Chapter Report Designs ). The revised report template (jasperreporttemplate. jrxml) are as follows. Save it to C:toolsjasperreports-5.0.1test directory minus The details of the revised report template is given below minus We have referenced the MyScriptlet class in the attribute scriptletClass of ltjasperReportgt element. Scriptlets can only access, but not modify the report fields and parameters. However, scriptlets can modify report variable values. This can be accomplished by calling the setVariableValue() method. This method is defined in JRAbstractScriptlet class, which is always the parent class of any scriptlet. Here, we have defined a variable someVar . which will be modified by the MyScriptlet to have the value This value was modified by the scriptlet . The above report template has a method call in the Summary band that illustrates how to write new methods (in scriptlets) and use them in the report template. ( P. hello() ) The java codes for report filling remain unchanged. The contents of the file C:toolsjasperreports-5.0.1testsrccomtutorialspointJasperReportFill. java are as given below minus The contents of the POJO file C:toolsjasperreports-5.0.1testsrccomtutorialspointDataBean. java are as given below minus The contents of the file C:toolsjasperreports-5.0.1testsrccomtutorialspointDataBeanList. java are as given below minus Report Generation We will compile and execute the above file using our regular ANT build process. The contents of the file build. xml (saved under directory C:toolsjasperreports-5.0.1test) are as given below. The import file - baseBuild. xml is picked up from the chapter Environment Setup and should be placed in the same directory as the build. xml. Next, lets open command line window and go to the directory where build. xml is placed. Finally, execute the command ant - Dmain-classcom. tutorialspoint. JasperReportFill (viewFullReport is the default target) as minus As a result of above compilation, a JasperViewer window opens up as shown in the screen given below minus Here we see two messages are displayed from MyScriptlet class minus In title section minus This variable value was modified by the scriptlet At the bottom minus Hello Im the reports scriptlet object. Create SubReports Subreports are one of the nice features of the JasperReports. This feature allows incorporating a report within another report, that is, one report can be a subreport of another. Subreports help us keep report designs simple, as we can create many simple reports and encapsulate them into a master report. Subreports are compiled and filled just like normal reports. Any report template can be used as a subreport when incorporated into another report template, without anything changed inside (of the report template). Subreports are like normal report templates. They are in fact net. sf. jasperreports. engine. JasperReport objects, which are obtained after compiling a net. sf. jasperreports. engine. design. JasperDesign object . ltsubreportgt Element A ltsubreportgt element is used when introducing subreports into master reports. Here is the list of sub-elements in the ltsubreportgt JRXML element. ltparametersMapExpressiongt minus This is used to pass a map containing report parameters to the subreport. The map is usually obtained from a parameter in the master report, or by using the built-in REPORTSPARAMETERSMAP parameter to pass the parent reports parameters to the subreport. This expression should always return a java. util. Map object in which the keys are the parameter names. ltsubreportParametergt minus This element is used to pass parameters to the subreport. It has an attribute name . which is mandatory. ltconnectionExpression gt minus This is used to pass a java. sql. Connection to the subreport. It is used only when the subreport template needs a database connection during report filling phase. ltdataSourceExpressiongt minus This is used to pass a datasource to the subreport. This datasource is usually obtained from a parameter in the master report or by using the built-in REPORTDATASOURCE parameter to pass the parent reports datasource to the subreport. The elements ( connectionExpression and dataSourceExpression ) cannot be present at the same time in a ltsubreportgt element declaration. This is because we cannot supply both a data source and a connection to the subreport. We must decide on one of them and stick to it. ltreturnValuegt minus This is used to assign the value of one of the subreports variables to one of the master reports variables. This sub element has attributes as follows minus subreportVariable minus This attribute