Criação de gráficos
No início, as pessoas dependiam de scriptlets para reunir os dados do gráfico e renderizá-lo usando um elemento de imagem no modelo de relatório. JasperReports torna isso simples agora, pois tem um suporte integrado para gráficos usando o novo componente de gráfico.
Usando um novo componente de gráfico, o usuário precisa aplicar apenas as configurações visuais e definir expressões que ajudarão a construir o conjunto de dados do gráfico. JasperReports usa JFreeChart como a biblioteca de gráficos subjacente. Ao configurar um novo componente gráfico, os três componentes a seguir estão envolvidos -
O componente geral do gráfico.
O conjunto de dados do gráfico (que agrupa as configurações relacionadas aos dados do gráfico).
O gráfico do gráfico (que agrupa as configurações visuais relacionadas à forma como os itens do gráfico são renderizados).
JasperReports atualmente suporta os seguintes tipos de gráficos: Pizza, Pizza 3D, Barra, Barra 3D, Barra XY, Barra Empilhada, Barra Empilhada 3D, Linha, Linha XY, Área, Área XY, Área Empilhada, Dispersão, Bolha, Série Temporal, Alta -Low-Open-Close, Candlestick, Multiple Axis, Meter, Thermometer e Gantt.
Propriedades do gráfico
Os gráficos são elementos normais do relatório, portanto, compartilham algumas de suas propriedades com todos os outros elementos do relatório. Existe um elemento JRXML chamado <chart>, usado para criar todos os tipos de gráficos. Este elemento agrupa configurações específicas de gráficos especiais que se aplicam a todos os tipos de gráficos.
Subelementos do gráfico
Os subelementos do elemento <chart> são -
<reportElement> - São objetos que podem ser exibidos como textos estáticos, campos de texto, imagens, linhas e retângulos que você coloca nas seções do modelo de relatório.
<Box> - Este elemento é usado para circundar os gráficos por uma borda personalizável em cada lado.
<chartTitle>- Este elemento é usado para colocar o título do gráfico. O atributo position decide a posição do título do gráfico no relatório. Este elemento possui atributos -Position(Os valores podem ser superior , inferior , esquerdo , direito . O valor surdo é superior ),color. <chartTitle> possui font e titleExpression como subelementos.
<chartSubtitle>- Este elemento é usado para colocar a legenda do gráfico. Este elemento possui atributo -color. <chartSubtitle> possui font e subtitleExpression como subelementos.
<chartLegend>- O elemento pode controlar as propriedades relacionadas à fonte, bem como a cor do texto e a cor de fundo da legenda do gráfico usando este elemento. Este elemento possui atributos -textColor e backgroundColor.
<anchorNameExpression> - Este elemento cria o alvo para a âncora.
<hyperlinkReferenceExpression> - Este elemento contém uma expressão de relatório que indica o nome do recurso externo (geralmente um URL).
<hyperlinkAnchorExpression> - O hiperlink aponta para uma âncora em um recurso externo.
<hyperlinkPageExpression> - O hiperlink aponta para uma página no relatório atual.
<hyperlinkTooltipExpression>- Este elemento controla a dica de ferramenta do hiperlink. O tipo da expressão deve ser java.lang.String .
<hyperlinkParameter> - Este elemento, quando presente, gera um hiperlink final dependendo dos valores dos parâmetros.
Atributos do gráfico
Atributos no elemento <chart> disponíveis para todos os tipos de gráfico são -
isShowLegend- Este atributo é usado para determinar se uma legenda do gráfico será exibida no relatório. Os valores podem ser verdadeiros ou falsos . O valor padrão é verdadeiro .
evaluationTime- Determina quando a expressão do gráfico será avaliada. Os valores podem ser Agora , Relatório , Página , Coluna , Grupo , Banda . O valor padrão é Agora .
evaluationGroup- Este atributo determina o nome do grupo a ser usado para avaliar as expressões do gráfico. O valor para este atributo deve corresponder ao nome do grupo, que gostaríamos de usar como grupo de avaliação do gráfico.
hyperlinkType- Este atributo pode conter qualquer valor de texto. O valor padrão é Nenhum . Isso significa que nem os campos de texto nem as imagens representam hiperlinks, mesmo que as expressões especiais de hiperlinks estejam presentes.
hyperlinkTarget- Este atributo ajuda a personalizar o comportamento do link especificado quando ele é clicado no visualizador. Os valores podem ser Self ou Blank . O valor padrão é Self .
bookmarkLevel- Este atributo quando definido como um inteiro positivo, gera marcadores nos relatórios exportados para PDF. O valor padrão é 0 .
customizerClass- Este é o nome de uma classe (opcional) que pode ser usada para personalizar o gráfico. O valor para este elemento deve ser uma String contendo o nome de uma classe do personalizador.
Personalização de gráfico
Conforme mencionado acima, JasperReports usa JFreeChart como a biblioteca de gráficos subjacente. JFreeChart contém recursos que não são diretamente suportados pelo JasperReports. Podemos tirar proveito desses recursos fornecendo uma classe de customizador por meio do atributo customizerClass no elemento <chart>. Uma classe de customizador não é nada, mas uma implementação da interface net.sf.jasperreports.engine.JRChartCustomizer . A maneira mais fácil de implementar essa interface é estendendo a classe net.sf.jasperreports.engine.JRAbstractChartCustomizer e, portanto, tendo acesso a parâmetros, campos e variáveis para personalização de gráfico mais flexível com base nos dados do relatório.
Conjuntos de dados gráficos
Uma das propriedades comuns em todos os tipos de gráfico é <dataset> elemento. Conjuntos de dados de gráfico ajudam a mapear dados de relatório e recuperar dados de gráfico em tempo de execução. Cada tipo de gráfico contém diferentes subelementos para definir as expressões do gráfico. Essas expressões definem os dados usados para gerar o gráfico. Todos esses subelementos contêm um elemento <dataset> que define quando as expressões do gráfico são avaliadas e redefinidas.
Vários tipos de conjuntos de dados de gráfico estão disponíveis no JasperReports porque cada tipo de gráfico funciona com certos conjuntos de dados: Pizza, Categoria, XY, Série Temporal, Período, XYZ e High-Low. Cada um desses tipos de conjunto de dados implementa a interface net.sf.jasperreports.engine.JRChartDataset que define os conjuntos de dados do gráfico. Todos os conjuntos de dados do gráfico são inicializados e incrementados da mesma maneira; no entanto, eles diferem apenas no tipo de dados ou série de dados que mapeiam.
Propriedades do conjunto de dados
A tabela abaixo resume os atributos do elemento <dataset> -
Atributo | Descrição | Valores |
---|---|---|
resetType | Este atributo determina quando o valor da expressão do gráfico deve ser redefinido. | Nenhum, Relatório, Página, Coluna, Grupo. O valor padrão éReport. |
resetGroup | Este atributo determina o nome do grupo no qual o valor da expressão do gráfico é redefinido. | O valor para este atributo deve corresponder ao nome de qualquer grupo declarado no modelo de relatório JRXML. |
incrementType | Este atributo determina quando recalcular o valor da expressão do gráfico. | Nenhum, Relatório, Página, Coluna, Grupo. O valor padrão é"None". |
incrementGroup | Este atributo determina o nome do grupo no qual a expressão do gráfico é recalculada. | O valor para este atributo deve corresponder ao nome de um grupo declarado no modelo de relatório JRXML. |
A tabela a seguir resume os subelementos do elemento <dataset> -
Subelemento | Descrição |
---|---|
<incrementWhenExpression> | A maneira como um conjunto de dados do gráfico é incrementado pode ser personalizada, filtrando os dados indesejados com o uso deste subelemento. |
<datasetRun> | Contém informações necessárias para instanciar um subconjunto de dados de relatório. |
Tipos de conjuntos de dados
Tipos de conjuntos de dados específicos são explicados abaixo -
Conjunto de dados de pizza
Um conjunto de dados de pizza é caracterizado pelas seguintes expressões -
<keyExpression> - representa as categorias que formarão as fatias no gráfico de pizza. Esta expressão pode retornar qualquer objeto java.lang.Comparable.
<valueExpression> - produz os valores que correspondem a cada categoria / chave no conjunto de dados. Os valores são sempre objetos java.lang.Number.
<labelExpression> - se esta expressão estiver ausente, o gráfico exibirá rótulos padrão para cada fatia do gráfico de pizza. Use esta expressão, que retorna valores java.lang.String, para personalizar os rótulos dos itens para o gráfico de pizza.
<sectionHyperlink> - define hiperlinks associados às seções de pizza.
Conjunto de dados da categoria
Um conjunto de dados de categoria é caracterizado pelo elemento <categorySeries>, que contém -
<seriesExpression> - indica o nome da série. Esta expressão pode retornar qualquer objeto java.lang.Comparable.
<categoryExpression> - retorna o nome da categoria para cada valor dentro da série especificada pela expressão da série. As categorias são objetos java.lang.Comparable.
<valueExpression> - produz os valores que correspondem a cada categoria no conjunto de dados. Os valores são sempre objetos java.lang.Number.
<labelExpression> - se esta expressão estiver ausente, o gráfico exibirá rótulos padrão para cada item no gráfico. Use esta expressão, que retorna valores java.lang.String, para personalizar os rótulos dos itens do gráfico.
<itemHyperlink> - define hiperlinks associados aos itens do gráfico.
Conjunto de dados XY
Um conjunto de dados XY é caracterizado pelo elemento <xySeries>, que contém -
<seriesExpression> - indica o nome da série. Esta expressão pode retornar qualquer objeto java.lang.Comparable.
<xValueExpression> - retorna o valor java.lang.Number que representa o valor X do par (x, y) que será adicionado à série de dados atual.
<yValueExpression> - retorna o valor java.lang.Number que representa o valor Y do par (x, y) que será adicionado à série de dados atual.
<labelExpression> - se esta expressão estiver ausente, o gráfico exibirá rótulos padrão para cada item no gráfico. Use esta expressão, que retorna valores java.lang.String, para personalizar os rótulos dos itens do gráfico.
<itemHyperlink> - define hiperlinks associados aos itens do gráfico.
Conjunto de dados XYZ
Um conjunto de dados XYZ é caracterizado pelo elemento <xyzSeries>, que contém -
<seriesExpression> - indica o nome da série. Esta expressão pode retornar qualquer objeto java.lang.Comparable.
<xValueExpression> - retorna o valor java.lang.Number que representa o valor X do item (x, y, z) que será adicionado à série de dados atual.
<yValueExpression> - retorna o valor java.lang.Number que representa o valor Y do item (x, y, z) que será adicionado à série de dados atual.
<zValueExpression> - retorna o valor java.lang.Number que representa o valor Z do item (x, y, z) que será adicionado à série de dados atual.
<labelExpression> - se esta expressão estiver ausente, o gráfico exibirá rótulos padrão para cada item no gráfico. Use esta expressão, que retorna valores java.lang.String, para personalizar os rótulos dos itens do gráfico.
<itemHyperlink> - define hiperlinks associados aos itens do gráfico.
Conjunto de dados de série temporal
Um conjunto de dados de série temporal é caracterizado pelo atributo timePeriod e pelo elemento <timeSeries>. O atributo timePeriod especifica o tipo da série de dados dentro do conjunto de dados. As séries temporais podem conter valores numéricos associados a dias, meses, anos ou outros períodos de tempo predefinidos. Os valores possíveis são: Ano, Trimestre, Mês, Semana, Dia - este é o valor padrão, Hora, Minuto, Segundo, Milissegundo.
O elemento <timeSeries> contém -
<seriesExpression> - indica o nome da série. Esta expressão pode retornar qualquer objeto java.lang.Comparable.
<timePeriodExpression> - retorna um valor java.util.Date do qual o mecanismo extrairá o período de tempo correspondente, dependendo do valor definido para o atributo timePeriod mencionado acima.
<valueExpression> - retorna o valor java.lang.Number para associar ao valor do período de tempo correspondente ao incrementar a série atual do conjunto de dados.
<labelExpression> - se esta expressão estiver ausente, o gráfico exibirá rótulos padrão para cada item no gráfico. Use esta expressão, que retorna valores java.lang.String, para personalizar os rótulos dos itens do gráfico.
<itemHyperlink> - define hiperlinks associados aos itens do gráfico.
Conjunto de dados de período de tempo
Um conjunto de dados de período de tempo é caracterizado pelo elemento <timePeriodSeries>, que contém -
<seriesExpression> - indica o nome da série. Esta expressão pode retornar qualquer objeto java.lang.Comparable.
<startDateExpression> - especifica o início do intervalo de datas com o qual o valor numérico será associado quando for adicionado à série do período de tempo.
<endDateExpression> - especifica o fim do intervalo de datas com o qual o valor numérico será associado quando for adicionado à série do período de tempo.
<valueExpression> - retorna o valor java.lang.Number para associar ao intervalo de data atual especificado pelas expressões de data de início e data de término.
<labelExpression> - se esta expressão estiver ausente, o gráfico exibirá rótulos padrão para cada item no gráfico. Use esta expressão, que retorna valores java.lang.String, para personalizar os rótulos dos itens do gráfico.
<itemHyperlink> - define hiperlinks associados aos itens do gráfico.
Conjunto de dados alto baixo
Um conjunto de dados muito baixo é caracterizado pelas seguintes expressões -
<seriesExpression> - atualmente, apenas uma série é suportada em um gráfico High-Low ou Candlestick. No entanto, essa série única deve ser identificada por um valor java.lang.Comparable retornado por esta expressão e também deve ser usado como o nome da série na legenda do gráfico.
<dateExpression> - retorna a data à qual o item atual (alto, baixo, aberto, fechado, volume) se refere.
<highExpression> - retorna um valor java.lang.Number, que fará parte do item de dados adicionado à série quando o conjunto de dados for incrementado.
<lowExpression> - retorna um valor java.lang.Number, que fará parte do item de dados adicionado à série quando o conjunto de dados for incrementado.
<openExpression> - retorna um valor java.lang.Number, que fará parte do item de dados adicionado à série quando o conjunto de dados for incrementado.
<closeExpression> - retorna um valor java.lang.Number, que fará parte do item de dados adicionado à série quando o conjunto de dados for incrementado.
<volumeExpression> - uma expressão numérica que retorna o valor do volume a ser usado para o item de dados atual. Ele é usado apenas para gráficos Candlestick.
<itemHyperlink> - define hiperlinks associados aos itens do gráfico.
Conjunto de dados de valor
Esta é uma implementação de conjunto de dados de gráfico especial que contém um único valor e é usada para renderizar gráficos de medidor e termômetro. O valor é coletado usando a expressão <valueExpression>.
Gráficos
Outro elemento JRXML comum em todos os tipos de gráfico é o <plot> elemento. Isso nos permite definir várias características do gráfico, como orientação e cor de fundo. Os gráficos variam de acordo com o tipo de gráfico.
Atributo de plotagem
A tabela abaixo resume os atributos do elemento <plot> -
Atributo | Descrição | Valores |
---|---|---|
cor de fundo | Este atributo define a cor de fundo do gráfico. | Qualquer valor hexadecimal de seis dígitos é um valor válido para este atributo. O valor hexadecimal deve ser precedido por um #. |
orientação | Este atributo define a orientação do gráfico. | Horizontal, Vertical O valor padrão é "Vertical" |
backgroundAlpha | Este atributo define a transparência da cor de fundo do gráfico. | Os valores válidos para este atributo incluem qualquer número decimal entre 0 e 1, inclusive. Quanto maior o número, menos transparente será o fundo. O valor padrão é "1". |
foregroundAlpha | Este atributo define a transparência das cores de primeiro plano do gráfico. | Os valores válidos para este atributo incluem qualquer número decimal entre 0 e 1, inclusive. Quanto maior o número, menos transparente será o fundo. O valor padrão é "1". |
labelRotation | Este atributo permite a rotação de rótulos de texto no eixo x para girar no sentido horário ou anti-horário. Este atributo se aplica apenas a gráficos para os quais o eixo x não é numérico ou não exibe datas. | O valor padrão é "0,0". |
O elemento <plot> possui um subelemento <seriesColor> cujos atributos são: seriesOrder e color . Este elemento personaliza as cores da série e sua posição na sequência de cores.
Configurações específicas para gráficos
piePlot - Não tem configurações específicas
pie3DPlot- Contém o atributo depthFactor , um valor numérico que varia de 0 a 1 que representa a profundidade da pizza como uma porcentagem da altura da área de plotagem.
barPlot - Pode-se mostrar ou ocultar rótulos de escala, marcas de escala ou rótulos de item e fornece configurações para ambos os eixos.
bar3DPlot - Fornece as mesmas configurações do barPlot e gera um efeito 3D usando os atributos xOffset e yOffset.
linePlot - Pode-se mostrar ou ocultar linhas conectando pontos de item, pode mostrar ou ocultar formas associadas a pontos de item e fornece configurações para ambos os eixos.
scatterPlot - Semelhante ao linePlot, ele pode mostrar ou ocultar linhas conectando pontos de item, pode mostrar ou ocultar formas associadas a pontos de item e fornece configurações para ambos os eixos.
areaPlot - Fornece configurações para ambos os eixos.
bubblePlot - É possível definir as dimensões da bolha definindo o atributo scaleType e fornece configurações para ambos os eixos.
timeSeriesPlot - Pode-se mostrar ou ocultar linhas conectando pontos de item, pode mostrar ou ocultar formas associadas a pontos de item e fornece configurações para ambos os eixos.
highLowPlot - Pode-se mostrar ou ocultar marcas abertas, pode mostrar ou ocultar marcas fechadas e oferece configurações para ambos os eixos.
candlestickPlot - Pode-se mostrar ou ocultar o volume e fornece configurações para ambos os eixos.
meterPlot - Contém configurações específicas para a forma do dial, ângulo de escala, unidades de medida, intervalo de escala, cor de discagem, cor de agulha, cor de escala, fonte de exibição de valor, cor e padrão de formato, intervalo de dados e intervalos de metros.
thermometerPlot - Contém configurações específicas para a localização do valor, cor de mercúrio, mostrar / ocultar linhas de valor, fonte de exibição de valor, padrão de cor e formato, intervalo de dados, intervalo baixo, intervalo médio e intervalo alto.
multiAxisChart - Contém configurações específicas para os eixos incluídos no gráfico.
Tipos de gráficos
JasperReports oferece suporte integrado para vários tipos de gráficos. Eles estão listados abaixo -
pieChart - Uma combinação de um conjunto de dados de pizza e um gráfico de pizza.
pie3DChart - Agrupa um conjunto de dados de pizza e um gráfico de pizza 3D.
barChart - Uma combinação básica de um conjunto de dados de categoria e um gráfico de barra.
bar3DChart - Envolve um conjunto de dados de categoria e um gráfico Bar 3D.
xyBarChart - Suporta conjuntos de dados de período de tempo, conjuntos de dados de série temporal e conjuntos de dados XY, e usa um gráfico de barra para renderizar o eixo e os itens.
stackedBarChart - Usa dados de um conjunto de dados de categoria e renderiza seu conteúdo usando um gráfico de barra.
stackedBar3DChart - Usa dados de um conjunto de dados de categoria e renderiza seu conteúdo usando um gráfico Bar 3D.
lineChart - Agrupa um conjunto de dados de categoria e um gráfico de linha.
xyLineChart - Agrupa um conjunto de dados XY e um gráfico de linha.
areaChart - Os itens de um conjunto de dados de categoria são renderizados usando um gráfico de área.
stackedAreaChart - Os itens de um conjunto de dados de categoria são renderizados usando um gráfico de área.
xyAreaChart - Usa dados de um conjunto de dados XY e os renderiza por meio de um gráfico de área.
scatterChart - Envolve um conjunto de dados XY com um gráfico Scatter.
bubbleChart - Combina um conjunto de dados XYZ com um gráfico de bolha.
timeSeriesChart - Agrupa um conjunto de dados de série temporal e um gráfico de série temporal.
highLowChart - Uma combinação de um conjunto de dados High-Low e um gráfico High-Low.
candlestickChart - Usa dados de um conjunto de dados High-Low, mas com um gráfico Candlestick especial.
meterChart - Exibe um único valor de um conjunto de dados de valor em um mostrador, usando opções de renderização de um gráfico de medidor.
thermometerChart - Exibe o valor único em um conjunto de dados de valor usando opções de renderização de um gráfico de termômetro.
multiAxisChart - Contém vários eixos de alcance, todos compartilhando um eixo de domínio comum.
Exemplo
Para demonstrar os gráficos, vamos escrever um novo modelo de relatório (jasper_report_template.jrxml). Aqui, vamos adicionar o <barChart> elemento para a seção <pageHeader> e <pieChart> para a seção <resumo>. Estaríamos exibindo em gráficos as notas obtidas para cada disciplina. Salve-o no diretórioC:\tools\jasperreports-5.0.1\test. O conteúdo do arquivo é o seguinte -
<?xml version = "1.0" encoding = "UTF-8"?>
<jasperReport xmlns = "http://jasperreports.sourceforge.net/jasperreports"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://jasperreports.sourceforge.net/jasperreports
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"
name = "jasper_report_template" pageWidth = "595" pageHeight = "860"
columnWidth = "515" leftMargin = "40" rightMargin = "40"
topMargin = "50" bottomMargin = "50">
<field name = "subjectName" class = "java.lang.String"/>
<field name = "marks" class = "java.lang.Integer"/>
<variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
<variableExpression>
<![CDATA[Boolean.TRUE]]>
</variableExpression>
</variable>
<background>
<band splitType = "Stretch"/>
</background>
<title>
<band height = "79" splitType = "Stretch"/>
</title>
<pageHeader>
<band height = "200">
<barChart>
<chart evaluationTime = "Report">
<reportElement x = "0" y = "0" width = "555" height = "200"/>
<chartTitle>
<titleExpression>
<![CDATA["My First JR Bar Chart"]]>
</titleExpression>
</chartTitle>
</chart>
<categoryDataset>
<dataset incrementType = "None"/>
<categorySeries>
<seriesExpression>
<![CDATA[$F{subjectName}]]>
</seriesExpression>
<categoryExpression>
<![CDATA[$F{subjectName}]]>
</categoryExpression>
<valueExpression>
<![CDATA[$F{marks}]]>
</valueExpression>
</categorySeries>
</categoryDataset>
<barPlot isShowTickMarks = "false">
<plot/>
</barPlot>
</barChart>
</band>
</pageHeader>
<columnHeader>
<band height = "20" splitType = "Stretch"/>
</columnHeader>
<detail>
<band height = "20" splitType = "Stretch"/>
</detail>
<columnFooter>
<band height = "20" splitType = "Stretch"/>
</columnFooter>
<pageFooter>
<band height = "20" splitType = "Stretch"/>
</pageFooter>
<summary>
<band height = "400" splitType = "Stretch">
<pieChart>
<chart evaluationTime = "Report">
<reportElement x = "135" y = "0" width = "270" height = "300"/>
<chartTitle>
<titleExpression>
<![CDATA["My First JR Pie Chart"]]>
</titleExpression>
</chartTitle>
</chart>
<pieDataset>
<dataset incrementType = "None"/>
<keyExpression>
<![CDATA[$F{subjectName}]]>
</keyExpression>
<valueExpression>
<![CDATA[$F{marks}]]>
</valueExpression>
</pieDataset>
<piePlot>
<plot/>
<itemLabel/>
</piePlot>
</pieChart>
</band>
</summary>
</jasperReport>
Os detalhes do arquivo acima são fornecidos abaixo -
O elemento JRXML usado para criar um gráfico de barras é </barChart> no <pageHeader>. Ele contém um subelemento </chart>, que contém um subelemento <reportElement> que define as dimensões e a posição do gráfico.
O elemento <dataset> em um gráfico de barras deve ser colocado entre os elementos <categoryDataset> e </categoryDataset> JRXML.
<categoryDataset> deve conter um elemento <categorySeries>. Este elemento define qual elemento de dados as barras representarão (nomes de assuntos, neste exemplo).
<categoryDataset> também deve conter um elemento, que define como os dados serão separados em categorias para comparação. Aqui, os dados são separados por nomes de assuntos.
O elemento <valueExpression> define qual expressão é usada para determinar o valor de cada barra no gráfico. Aqui, estamos usando "marcas".
Para o gráfico de pizza, usamos o elemento <pieChart> na seção <summary>. Ele contém um subelemento </chart>.
O subelemento contém uma expressão de relatório que indica o que usar como chave no gráfico. Aqui, usamos subjectName.
O subelemento contém uma expressão usada para calcular o valor da chave. Aqui, usamos marcas.
Os códigos java para preenchimento de relatório permanecem inalterados. O conteúdo do arquivoC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java são os dados abaixo -
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList<DataBean> dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource = new
JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
try {
JasperFillManager.fillReportToFile( sourceFileName,
parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
Como estaríamos exibindo as notas obtidas para cada disciplina, o POJO precisa ser alterado. O arquivoC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java os conteúdos são os indicados abaixo -
package com.tutorialspoint;
public class DataBean {
private String subjectName;
private Integer marks;
public String getSubjectName() {
return subjectName;
}
public void setSubjectName(String subjectName) {
this.subjectName = subjectName;
}
public Integer getMarks() {
return marks;
}
public void setMarks(Integer marks) {
this.marks = marks;
}
}
Até mesmo o conteúdo do arquivo C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java precisa ser atualizado conforme fornecido abaixo -
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("English", 58));
dataBeanList.add(produce("SocialStudies", 68));
dataBeanList.add(produce("Maths", 38));
dataBeanList.add(produce("Hindi", 88));
dataBeanList.add(produce("Scince", 78));
return dataBeanList;
}
/*
* This method returns a DataBean object, with subjectName ,
* and marks set in it.
*/
private DataBean produce(String subjectName, Integer marks) {
DataBean dataBean = new DataBean();
dataBean.setSubjectName(subjectName);
dataBean.setMarks(marks);
return dataBean;
}
}
Geração de relatório
A seguir, vamos compilar e executar os arquivos acima usando nosso processo normal de construção ANT. O conteúdo do arquivo build.xml (salvo no diretório C: \ tools \ jasperreports-5.0.1 \ test) é fornecido a seguir.
O arquivo de importação - baseBuild.xml é obtido no capítulo Configuração do ambiente e deve ser colocado no mesmo diretório do build.xml.
<?xml version = "1.0" encoding = "UTF-8"?>
<project name = "JasperReportTest" default = "viewFillReport" basedir = ".">
<import file = "baseBuild.xml" />
<target name = "viewFillReport" depends = "compile,compilereportdesing,run"
description = "Launches the report viewer to preview the
report stored in the .JRprint file.">
<java classname = "net.sf.jasperreports.view.JasperViewer" fork = "true">
<arg value = "-F${file.name}.JRprint" />
<classpath refid = "classpath" />
</java>
</target>
<target name = "compilereportdesing" description = "Compiles the JXML file and
produces the .jasper file.">
<taskdef name = "jrc" classname = "net.sf.jasperreports.ant.JRAntCompileTask">
<classpath refid = "classpath" />
</taskdef>
<jrc destdir = ".">
<src>
<fileset dir = ".">
<include name = "*.jrxml" />
</fileset>
</src>
<classpath refid = "classpath" />
</jrc>
</target>
</project>
A seguir, vamos abrir a janela da linha de comando e ir para o diretório onde build.xml está colocado. Finalmente, execute o comandoant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport é o destino padrão) da seguinte forma -
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrprint
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to bu
[javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 19 minutes 45 seconds
Como resultado da compilação acima, uma janela JasperViewer se abre como na tela abaixo -
Aqui, vemos que o gráfico de barras é criado no cabeçalho da página e o gráfico de pizza é criado nas seções de resumo.