Crear gráficos
Las personas anteriores tenían que confiar en scriptlets para recopilar los datos del gráfico y representar el gráfico utilizando un elemento de imagen en la plantilla de informe. JasperReports lo simplifica ahora, ya que tiene un soporte incorporado para gráficos que usan el nuevo componente de gráficos.
Al usar un nuevo componente de gráfico, el usuario debe aplicar solo la configuración visual y definir expresiones que ayudarán a construir el conjunto de datos del gráfico. JasperReports usa JFreeChart como la biblioteca de gráficos subyacente. Al configurar un nuevo componente de gráfico, están involucrados los siguientes tres componentes:
El componente de gráfico general.
El conjunto de datos del gráfico (que agrupa la configuración relacionada con los datos del gráfico).
El gráfico del gráfico (que agrupa la configuración visual relacionada con la forma en que se representan los elementos del gráfico).
JasperReports actualmente admite los siguientes tipos de gráficos: circular, circular 3D, barra, barra 3D, barra XY, barra apilada, barra apilada 3D, línea, línea XY, área, área XY, área apilada, dispersión, burbuja, serie temporal, alta -Low-Open-Close, Candlestick, Multiple Axis, Meter, Termómetro y Gantt.
Propiedades del gráfico
Los gráficos son elementos de informe normales, por lo que comparten algunas de sus propiedades con todos los demás elementos del informe. Hay un elemento JRXML llamado <chart>, utilizado para crear todo tipo de gráficos. Este elemento agrupa configuraciones especiales específicas de gráficos que se aplican a todos los tipos de gráficos.
Subelementos del gráfico
Los subelementos del elemento <chart> son:
<reportElement> - Estos son objetos visualizables como textos estáticos, campos de texto, imágenes, líneas y rectángulos que coloca en las secciones de su plantilla de informe.
<Box> - Este elemento se utiliza para rodear los gráficos con un borde que se puede personalizar en cada lado.
<chartTitle>- Este elemento se utiliza para colocar el título del gráfico. El atributo de posición decide la posición del título del gráfico en el informe. Este elemento tiene atributos:Position(Los valores pueden ser Superior , Inferior , Izquierda , Derecha . El valor predeterminado es Superior ),color. <chartTitle> tiene font y titleExpression como subelementos.
<chartSubtitle>- Este elemento se utiliza para colocar el subtítulo del gráfico. Este elemento tiene atributo -color. <chartSubtitle> tiene fuente y subtitleExpression como subelementos.
<chartLegend>- El elemento puede controlar las propiedades relacionadas con la fuente, así como el color del texto y el color de fondo de la leyenda del gráfico utilizando este elemento. Este elemento tiene atributos:textColor y backgroundColor.
<anchorNameExpression> - Este elemento crea el objetivo para el ancla.
<hyperlinkReferenceExpression> - Este elemento contiene una expresión de informe que indica el nombre del recurso externo (generalmente una URL).
<hyperlinkAnchorExpression> - El hipervínculo apunta a un ancla en un recurso externo.
<hyperlinkPageExpression> - El hipervínculo apunta a una página del informe actual.
<hyperlinkTooltipExpression>- Este elemento controla la información sobre herramientas del hipervínculo. El tipo de expresión debe ser java.lang.String .
<hyperlinkParameter> - Este elemento cuando está presente genera un hipervínculo final en función de los valores de los parámetros.
Atributos del gráfico
Los atributos en el elemento <chart> disponibles para todos los tipos de gráficos son:
isShowLegend- Este atributo se utiliza para determinar si se mostrará una leyenda de gráfico en el informe. Los valores pueden ser verdaderos o falsos . El valor predeterminado es verdadero .
evaluationTime- Determina cuándo se evaluará la expresión del gráfico. Los valores pueden ser Ahora , Informe , Página , Columna , Grupo , Banda . El valor predeterminado es Ahora .
evaluationGroup- Este atributo determina el nombre del grupo que se utilizará para evaluar las expresiones del gráfico. El valor de este atributo debe coincidir con el nombre del grupo que nos gustaría usar como grupo de evaluación del gráfico.
hyperlinkType- Este atributo puede contener cualquier valor de texto. El valor predeterminado es Ninguno . Esto significa que ni los campos de texto ni las imágenes representan hipervínculos, incluso si las expresiones especiales de hipervínculo están presentes.
hyperlinkTarget- Este atributo ayuda a personalizar el comportamiento del enlace especificado cuando se hace clic en él en el visor. Los valores pueden ser Self o Blank . El valor predeterminado es Self .
bookmarkLevel- Este atributo cuando se establece en un número entero positivo, genera marcadores en los informes exportados a PDF. El valor predeterminado es 0 .
customizerClass- Este es el nombre de una clase (opcional) que se puede usar para personalizar el gráfico. El valor de este elemento debe ser una cadena que contenga el nombre de una clase de personalizador.
Personalización de gráficos
Como se mencionó anteriormente, JasperReports usa JFreeChart como la biblioteca de gráficos subyacente. JFreeChart contiene funciones que JasperReports no admite directamente. Podemos aprovechar estas características proporcionando una clase de personalizador a través del atributo customizerClass en el elemento <chart>. Una clase de personalizador no es más que una implementación de la interfaz net.sf.jasperreports.engine.JRChartCustomizer . La forma más fácil de implementar esta interfaz es extendiendo la clase net.sf.jasperreports.engine.JRAbstractChartCustomizer y así tener acceso a parámetros, campos y variables para una personalización de gráficos más flexible basada en datos de informes.
Conjuntos de datos de gráficos
Una de las propiedades comunes en todos los tipos de gráficos es <dataset> elemento. Los conjuntos de datos de gráficos ayudan a mapear datos de informes y recuperar datos de gráficos en tiempo de ejecución. Cada tipo de gráfico contiene diferentes subelementos para definir las expresiones del gráfico. Estas expresiones definen los datos utilizados para generar el gráfico. Todos estos subelementos contienen un elemento <dataset> que define cuándo se evalúan y restablecen las expresiones del gráfico.
Varios tipos de conjuntos de datos de gráficos están disponibles en JasperReports porque cada tipo de gráfico funciona con ciertos conjuntos de datos: circular, categoría, XY, serie temporal, período de tiempo, XYZ y alto-bajo. Cada uno de estos tipos de conjuntos de datos implementa la interfaz net.sf.jasperreports.engine.JRChartDataset que define conjuntos de datos de gráficos. Todos los conjuntos de datos de gráficos se inicializan e incrementan de la misma manera; sin embargo, solo difieren en el tipo de datos o series de datos que mapean.
Propiedades del conjunto de datos
La tabla que se muestra a continuación resume los atributos del elemento <dataset> -
Atributo | Descripción | Valores |
---|---|---|
resetType | Este atributo determina cuándo se restablecerá el valor de la expresión del gráfico. | Ninguno, Informe, Página, Columna, Grupo. El valor predeterminado esReport. |
resetGroup | Este atributo determina el nombre del grupo en el que se restablece el valor de la expresión del gráfico. | El valor de este atributo debe coincidir con el nombre de cualquier grupo declarado en la plantilla de informe JRXML. |
incrementType | Este atributo determina cuándo recalcular el valor de la expresión del gráfico. | Ninguno, Informe, Página, Columna, Grupo. El valor predeterminado es"None". |
incrementGroup | Este atributo determina el nombre del grupo en el que se recalcula la expresión del gráfico. | El valor de este atributo debe coincidir con el nombre de un grupo declarado en la plantilla de informe JRXML. |
La siguiente tabla resume los subelementos del elemento <dataset> -
Elemento secundario | Descripción |
---|---|
<incrementWhenExpression> | La forma en que se incrementa un conjunto de datos de gráfico se puede personalizar filtrando los datos no deseados mediante el uso de este subelemento. |
<datasetRun> | Contiene la información necesaria para crear una instancia de un subconjunto de informes. |
Tipos de conjuntos de datos
Los tipos de conjuntos de datos específicos se explican a continuación:
Conjunto de datos circular
Un conjunto de datos circular se caracteriza por las siguientes expresiones:
<keyExpression>: representa las categorías que formarán los sectores en el gráfico circular. Esta expresión puede devolver cualquier objeto java.lang.Comparable.
<valueExpression>: genera los valores que corresponden a cada categoría / clave en el conjunto de datos. Los valores son siempre objetos java.lang.Number.
<labelExpression>: si falta esta expresión, el gráfico mostrará etiquetas predeterminadas para cada sector del gráfico circular. Utilice esta expresión, que devuelve valores java.lang.String, para personalizar las etiquetas de los elementos del gráfico circular.
<sectionHyperlink>: establece hipervínculos asociados con las secciones circulares.
Conjunto de datos de categoría
Un conjunto de datos de categoría se caracteriza por el elemento <categorySeries>, que contiene:
<seriesExpression>: indica el nombre de la serie. Esta expresión puede devolver cualquier objeto java.lang.Comparable.
<categoryExpression>: devuelve el nombre de la categoría para cada valor dentro de la serie especificada por la expresión de la serie. Las categorías son objetos java.lang.Comparable.
<valueExpression>: genera los valores que corresponden a cada categoría en el conjunto de datos. Los valores son siempre objetos java.lang.Number.
<labelExpression>: si falta esta expresión, el gráfico mostrará etiquetas predeterminadas para cada elemento del gráfico. Utilice esta expresión, que devuelve valores java.lang.String, para personalizar las etiquetas de los elementos del gráfico.
<itemHyperlink>: establece hipervínculos asociados con elementos del gráfico.
Conjunto de datos XY
Un conjunto de datos XY se caracteriza por el elemento <xySeries>, que contiene:
<seriesExpression>: indica el nombre de la serie. Esta expresión puede devolver cualquier objeto java.lang.Comparable.
<xValueExpression>: devuelve el valor java.lang.Number que representa el valor X del par (x, y) que se agregará a la serie de datos actual.
<yValueExpression>: devuelve el valor java.lang.Number que representa el valor Y del par (x, y) que se agregará a la serie de datos actual.
<labelExpression>: si falta esta expresión, el gráfico mostrará etiquetas predeterminadas para cada elemento del gráfico. Utilice esta expresión, que devuelve valores java.lang.String, para personalizar las etiquetas de los elementos del gráfico.
<itemHyperlink>: establece hipervínculos asociados con los elementos del gráfico.
Conjunto de datos XYZ
Un conjunto de datos XYZ se caracteriza por el elemento <xyzSeries>, que contiene:
<seriesExpression>: indica el nombre de la serie. Esta expresión puede devolver cualquier objeto java.lang.Comparable.
<xValueExpression>: devuelve el valor java.lang.Number que representa el valor X del elemento (x, y, z) que se agregará a la serie de datos actual.
<yValueExpression>: devuelve el valor java.lang.Number que representa el valor Y del elemento (x, y, z) que se agregará a la serie de datos actual.
<zValueExpression>: devuelve el valor java.lang.Number que representa el valor Z del elemento (x, y, z) que se agregará a la serie de datos actual.
<labelExpression>: si falta esta expresión, el gráfico mostrará etiquetas predeterminadas para cada elemento del gráfico. Utilice esta expresión, que devuelve valores java.lang.String, para personalizar las etiquetas de los elementos del gráfico.
<itemHyperlink>: establece hipervínculos asociados con los elementos del gráfico.
Conjunto de datos de series temporales
Un conjunto de datos de series de tiempo se caracteriza por el atributo timePeriod y el elemento <timeSeries>. El atributo timePeriod especifica el tipo de serie de datos dentro del conjunto de datos. Las series de tiempo pueden contener valores numéricos asociados con días, meses, años u otros períodos de tiempo predefinidos. Los valores posibles son: año, trimestre, mes, semana, día: este es el valor predeterminado, hora, minuto, segundo, milisegundo.
El elemento <timeSeries> contiene:
<seriesExpression>: indica el nombre de la serie. Esta expresión puede devolver cualquier objeto java.lang.Comparable.
<timePeriodExpression>: devuelve un valor java.util.Date del cual el motor extraerá el período de tiempo correspondiente según el valor establecido para el atributo timePeriod mencionado anteriormente.
<valueExpression>: devuelve el valor java.lang.Number para asociarlo con el valor del período de tiempo correspondiente al incrementar la serie actual del conjunto de datos.
<labelExpression>: si falta esta expresión, el gráfico mostrará etiquetas predeterminadas para cada elemento del gráfico. Utilice esta expresión, que devuelve valores java.lang.String, para personalizar las etiquetas de los elementos del gráfico.
<itemHyperlink>: establece hipervínculos asociados con los elementos del gráfico.
Conjunto de datos de período de tiempo
Un conjunto de datos de período de tiempo se caracteriza por el elemento <timePeriodSeries>, que contiene:
<seriesExpression>: indica el nombre de la serie. Esta expresión puede devolver cualquier objeto java.lang.Comparable.
<startDateExpression>: especifica el comienzo del intervalo de fechas con el que se asociará el valor numérico cuando se agregue a la serie del período de tiempo.
<endDateExpression>: especifica el final del intervalo de fechas con el que se asociará el valor numérico cuando se agregue a la serie del período de tiempo.
<valueExpression>: devuelve el valor java.lang.Number para asociarlo con el intervalo de fecha actual especificado por las expresiones de fecha de inicio y fecha de finalización.
<labelExpression>: si falta esta expresión, el gráfico mostrará etiquetas predeterminadas para cada elemento del gráfico. Utilice esta expresión, que devuelve valores java.lang.String, para personalizar las etiquetas de los elementos del gráfico.
<itemHyperlink>: establece hipervínculos asociados con los elementos del gráfico.
Conjunto de datos alto bajo
Un conjunto de datos alto bajo se caracteriza por las siguientes expresiones:
<seriesExpression>: actualmente, solo se admite una serie dentro de un gráfico High-Low o Candlestick. Sin embargo, esta serie única debe identificarse mediante un valor java.lang.Comparable devuelto por esta expresión, y también debe usarse como el nombre de la serie en la leyenda del gráfico.
<dateExpression>: devuelve la fecha a la que se refiere el elemento actual (máximo, mínimo, abierto, cerrado, volumen).
<highExpression>: devuelve un valor java.lang.Number, que será parte del elemento de datos agregado a la serie cuando se incremente el conjunto de datos.
<lowExpression>: devuelve un valor java.lang.Number, que será parte del elemento de datos agregado a la serie cuando se incremente el conjunto de datos.
<openExpression>: devuelve un valor java.lang.Number, que será parte del elemento de datos agregado a la serie cuando se incremente el conjunto de datos.
<closeExpression>: devuelve un valor java.lang.Number, que será parte del elemento de datos agregado a la serie cuando se incremente el conjunto de datos.
<volumeExpression>: una expresión numérica que devuelve el valor de volumen que se utilizará para el elemento de datos actual. Se utiliza solo para gráficos de velas japonesas.
<itemHyperlink>: establece hipervínculos asociados con los elementos del gráfico.
Conjunto de datos de valor
Esta es una implementación de conjunto de datos de gráfico especial que contiene un valor único y se utiliza para representar gráficos de medidor y termómetro. El valor se recopila mediante la expresión <valueExpression>.
Gráficos gráficos
Otro elemento común de JRXML en todos los tipos de gráficos es <plot> elemento. Esto nos permite definir varias de las características del gráfico, como la orientación y el color de fondo. Los gráficos difieren según el tipo de gráfico.
Atributo de la trama
La tabla que se muestra a continuación resume los atributos del elemento <plot> -
Atributo | Descripción | Valores |
---|---|---|
color de fondo | Este atributo define el color de fondo del gráfico. | Cualquier valor hexadecimal de seis dígitos es un valor válido para este atributo. El valor hexadecimal debe ir precedido de un #. |
orientación | Este atributo define la orientación del gráfico. | Horizontal, Vertical El valor predeterminado es "Vertical" |
fondo alfa | Este atributo define la transparencia del color de fondo del gráfico. | Los valores válidos para este atributo incluyen cualquier número decimal entre 0 y 1, inclusive. Cuanto mayor sea el número, menos transparente será el fondo. El valor predeterminado es "1". |
primer plano alfa | Este atributo define la transparencia de los colores de primer plano del gráfico. | Los valores válidos para este atributo incluyen cualquier número decimal entre 0 y 1, inclusive. Cuanto mayor sea el número, menos transparente será el fondo. El valor predeterminado es "1". |
labelRotation | Este atributo permite la rotación de etiquetas de texto en el eje x para girar en sentido horario o antihorario. Este atributo se aplica solo a gráficos para los que el eje x no es numérico o no muestra fechas. | El valor predeterminado es "0.0". |
El elemento <plot> tiene un subelemento <seriesColor> cuyos atributos son: seriesOrder y color . Este elemento personaliza los colores de las series y su posición dentro de la secuencia de colores.
Configuración específica para gráficos de gráficos
piePlot - No tiene configuraciones específicas
pie3DPlot- Contiene el atributo depthFactor , un valor numérico que va de 0 a 1 que representa la profundidad del gráfico como porcentaje de la altura del área de la parcela.
barPlot - Se pueden mostrar u ocultar etiquetas de graduación, marcas de graduación o etiquetas de elementos, y proporciona configuraciones para ambos ejes.
bar3DPlot - Proporciona la misma configuración que barPlot y genera un efecto 3D utilizando los atributos xOffset y yOffset.
linePlot - Se pueden mostrar u ocultar líneas que conectan puntos de elementos, se pueden mostrar u ocultar formas asociadas con puntos de elementos y se proporcionan configuraciones para ambos ejes.
scatterPlot - Similar a linePlot, puede mostrar u ocultar líneas que conectan puntos de elementos, puede mostrar u ocultar formas asociadas con puntos de elementos y proporciona configuraciones para ambos ejes.
areaPlot - Proporciona ajustes para ambos ejes.
bubblePlot - Uno puede establecer las dimensiones de la burbuja estableciendo el atributo scaleType y proporciona configuraciones para ambos ejes.
timeSeriesPlot - Se pueden mostrar u ocultar líneas que conectan puntos de elementos, se pueden mostrar u ocultar formas asociadas con puntos de elementos y se proporcionan configuraciones para ambos ejes.
highLowPlot - Uno puede mostrar u ocultar tics abiertos, puede mostrar u ocultar ticks cercanos y proporciona configuraciones para ambos ejes.
candlestickPlot - Se puede mostrar u ocultar el volumen y proporciona configuraciones para ambos ejes.
meterPlot - Contiene configuraciones específicas para la forma del cuadrante, el ángulo de escala, las unidades de medida, el intervalo de marcación, el color del cuadrante, el color de la aguja, el color de la marca, la fuente de visualización de valores, el patrón de color y formato, el rango de datos y los intervalos de medición.
thermometerPlot - Contiene configuraciones específicas para la ubicación del valor, color de mercurio, mostrar / ocultar líneas de valor, fuente de visualización de valor, patrón de color y formato, rango de datos, rango bajo, rango medio y rango alto.
multiAxisChart - Contiene configuraciones específicas para el eje incluido en el gráfico.
Tipos de gráficos
JasperReports ofrece soporte integrado para varios tipos de gráficos. Se enumeran a continuación:
pieChart - Una combinación de un conjunto de datos circular y un gráfico circular.
pie3DChart - Agrupa un conjunto de datos circular y un gráfico circular 3D.
barChart - Una combinación básica de un conjunto de datos de categoría y un gráfico de barras.
bar3DChart - Envuelve un conjunto de datos de categoría y un gráfico de barras en 3D.
xyBarChart - Admite conjuntos de datos de período de tiempo, conjuntos de datos de series temporales y conjuntos de datos XY, y utiliza un gráfico de barras para representar el eje y los elementos.
stackedBarChart - Utiliza datos de un conjunto de datos de categoría y representa su contenido mediante un gráfico de barras.
stackedBar3DChart - Utiliza datos de un conjunto de datos de categoría y representa su contenido mediante un gráfico de barras 3D.
lineChart - Agrupa un conjunto de datos de categoría y un gráfico de línea.
xyLineChart - Agrupa un conjunto de datos XY y una gráfica de línea.
areaChart - Los elementos de un conjunto de datos de categoría se representan mediante un gráfico de área.
stackedAreaChart - Los elementos de un conjunto de datos de categoría se representan mediante un gráfico de área.
xyAreaChart - Utiliza datos de un conjunto de datos XY y los representa a través de un gráfico de área.
scatterChart - Envuelve un conjunto de datos XY con un diagrama de dispersión.
bubbleChart - Combina un conjunto de datos XYZ con un gráfico de burbujas.
timeSeriesChart - Agrupa un conjunto de datos de series temporales y una gráfica de series temporales.
highLowChart - Una combinación de un conjunto de datos High-Low y un gráfico High-Low.
candlestickChart - Utiliza datos de un conjunto de datos alto-bajo pero con un gráfico de velas especiales.
meterChart - Muestra un solo valor de un conjunto de datos de valor en un dial, utilizando opciones de representación de un gráfico de medidor.
thermometerChart - Muestra el valor único en un conjunto de datos de valor utilizando las opciones de representación de un gráfico de termómetro.
multiAxisChart - Contiene múltiples ejes de rango, todos compartiendo un eje de dominio común.
Ejemplo
Para demostrar los gráficos, escriba una nueva plantilla de informe (jasper_report_template.jrxml). Aquí, agregaremos el <barChart> elemento a la sección <pageHeader> y <pieChart> a la sección <summary>. Estaríamos mostrando en gráficos las notas obtenidas para cada asignatura. Guárdelo en el directorioC:\tools\jasperreports-5.0.1\test. El contenido del archivo es el que se indica a continuación:
<?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>
Los detalles del archivo anterior son los que se indican a continuación:
El elemento JRXML utilizado para crear un gráfico de barras es </barChart> en <pageHeader>. Contiene un subelemento </chart>, que contiene un subelemento <reportElement> que define las dimensiones y la posición del gráfico.
El elemento <dataset> en un gráfico de barras debe incluirse entre los elementos <categoryDataset> y </categoryDataset> JRXML.
<categoryDataset> debe contener un elemento <categorySeries>. Este elemento define qué elemento de datos representarán las barras (nombres de sujetos, en este ejemplo).
<categoryDataset> también debe contener un elemento, que defina cómo se separarán los datos en categorías para la comparación. Aquí, los datos están separados por nombres de sujetos.
El elemento <valueExpression> define qué expresión se usa para determinar el valor de cada barra en el gráfico. Aquí, estamos usando "marcas".
Para el gráfico circular, hemos utilizado el elemento <pieChart> en la sección <summary>. Contiene un subelemento </chart>.
El subelemento contiene una expresión de informe que indica qué utilizar como clave en el gráfico. Aquí, hemos utilizado subjectName.
El subelemento contiene una expresión que se utiliza para calcular el valor de la clave. Aquí, hemos utilizado marcas.
Los códigos Java para el llenado de informes no se modifican. El contenido del archivoC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java son los que se indican a continuación:
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 mostrando las calificaciones obtenidas para cada asignatura, es necesario cambiar POJO. El archivoC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java los contenidos son los que se indican a continuación:
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;
}
}
Incluso el contenido del archivo C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java deben actualizarse como se indica a continuación:
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;
}
}
La generación del informe
A continuación, compilemos y ejecutemos los archivos anteriores utilizando nuestro proceso de compilación ANT habitual. El contenido del archivo build.xml (guardado en el directorio C: \ tools \ jasperreports-5.0.1 \ test) se muestra a continuación.
El archivo de importación, baseBuild.xml, se obtiene del capítulo Configuración del entorno y debe colocarse en el mismo directorio que 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 continuación, abramos la ventana de la línea de comandos y vayamos al directorio donde se coloca build.xml. Finalmente, ejecute el comandoant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport es el destino predeterminado) de la siguiente manera:
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 de la compilación anterior, se abre una ventana de JasperViewer como en la siguiente pantalla:
Aquí, vemos que el gráfico de barras se crea en el encabezado de página y el gráfico circular se crea en las secciones de resumen.