Creazione di grafici
In precedenza le persone dovevano fare affidamento su scriptlet per raccogliere i dati del grafico e renderizzare il grafico utilizzando un elemento immagine nel modello di rapporto. JasperReports lo rende semplice ora, poiché ha un supporto integrato per i grafici che utilizzano il nuovo componente grafico.
Utilizzando un nuovo componente grafico, l'utente deve applicare solo le impostazioni visive e definire espressioni che aiuteranno a costruire il set di dati del grafico. JasperReports utilizza JFreeChart come libreria di grafici sottostante. Quando si configura un nuovo componente del grafico, sono coinvolti i seguenti tre componenti:
Il componente grafico complessivo.
Il set di dati del grafico (che raggruppa le impostazioni relative ai dati del grafico).
Il grafico del grafico (che raggruppa le impostazioni visive relative al modo in cui vengono visualizzati gli elementi del grafico).
JasperReports attualmente supporta i seguenti tipi di grafici: Torta, Torta 3D, Barra, Barra 3D, Barra XY, Barra in pila, Barra in pila 3D, Linea, Linea XY, Area, Area XY, Area in pila, Scatter, Bolla, Serie temporali, Alta -Low-Open-Close, Candeliere, Assi multipli, Metro, Termometro e Gantt.
Proprietà grafico
I grafici sono normali elementi del report, quindi condividono alcune delle loro proprietà con tutti gli altri elementi del report. C'è un elemento JRXML chiamato <chart>, utilizzato per creare tutti i tipi di grafici. Questo elemento raggruppa impostazioni specifiche del grafico speciali che si applicano a tutti i tipi di grafici.
Elementi secondari del grafico
I sottoelementi dell'elemento <chart> sono:
<reportElement> - Questi sono oggetti visualizzabili come testi statici, campi di testo, immagini, linee e rettangoli inseriti nelle sezioni del modello di rapporto.
<Box> - Questo elemento viene utilizzato per circondare i grafici con un bordo personalizzabile su ciascun lato.
<chartTitle>- Questo elemento viene utilizzato per posizionare il titolo del grafico. L' attributo position decide la posizione del titolo del grafico nel report. Questo elemento ha attributi:Position(I valori possono essere Top , Bottom , Left , Right . Il valore Deafult è Top ),color. <chartTitle> ha font e titleExpression come sottoelementi.
<chartSubtitle>- Questo elemento viene utilizzato per posizionare il sottotitolo del grafico. Questo elemento ha un attributo -color. <chartSubtitle> ha font e subtitleExpression come sottoelementi.
<chartLegend>- L'elemento può controllare le proprietà relative al carattere, nonché il colore del testo e il colore di sfondo della legenda del grafico utilizzando questo elemento. Questo elemento ha attributi:textColor e backgroundColor.
<anchorNameExpression> - Questo elemento crea il target per l'ancora.
<hyperlinkReferenceExpression> - Questo elemento contiene un'espressione di report che indica il nome della risorsa esterna (solitamente un URL).
<hyperlinkAnchorExpression> - Il collegamento ipertestuale punta a un'ancora in una risorsa esterna.
<hyperlinkPageExpression> - Il collegamento ipertestuale punta a una pagina nel report corrente.
<hyperlinkTooltipExpression>- Questo elemento controlla la descrizione comando del collegamento ipertestuale. Il tipo di espressione dovrebbe essere java.lang.String .
<hyperlinkParameter> - Questo elemento, se presente, genera un collegamento ipertestuale finale a seconda dei valori dei parametri.
Attributi del grafico
Gli attributi nell'elemento <chart> disponibili per tutti i tipi di grafico sono:
isShowLegend- Questo attributo viene utilizzato per determinare se una legenda del grafico verrà visualizzata nel report. I valori potrebbero essere veri o falsi . Il valore predefinito è vero .
evaluationTime- Determina quando verrà valutata l'espressione del grafico. I valori possono essere Now , Report , Page , Column , Group , Band . Il valore predefinito è Now .
evaluationGroup- Questo attributo determina il nome del gruppo da utilizzare per valutare le espressioni del grafico. Il valore di questo attributo deve corrispondere al nome del gruppo, che vorremmo utilizzare come gruppo di valutazione del grafico.
hyperlinkType- Questo attributo può contenere qualsiasi valore di testo. Il valore predefinito è Nessuno . Ciò significa che né i campi di testo né le immagini rappresentano collegamenti ipertestuali, anche se sono presenti le espressioni speciali di collegamento ipertestuale.
hyperlinkTarget- Questo attributo aiuta a personalizzare il comportamento del collegamento specificato quando viene cliccato nel visualizzatore. I valori potrebbero essere Self o Blank . Il valore predefinito è Self .
bookmarkLevel- Questo attributo, se impostato su un numero intero positivo, genera segnalibri nei report esportati in PDF. Il valore predefinito è 0 .
customizerClass- Questo è il nome di una classe (opzionale) che può essere utilizzata per personalizzare il grafico. Il valore per questo elemento deve essere una stringa contenente il nome di una classe di personalizzazione.
Personalizzazione della carta
Come accennato in precedenza, JasperReports utilizza JFreeChart come libreria di grafici sottostante. JFreeChart contiene funzionalità che non sono direttamente supportate da JasperReports. Possiamo trarre vantaggio da queste funzionalità fornendo una classe di personalizzazione tramite l' attributo customizerClass nell'elemento <chart>. Una classe customizer non è altro che un'implementazione dell'interfaccia net.sf.jasperreports.engine.JRChartCustomizer . Il modo più semplice per implementare questa interfaccia è estendere la classe net.sf.jasperreports.engine.JRAbstractChartCustomizer e avere così accesso a parametri, campi e variabili per una personalizzazione del grafico più flessibile basata sui dati del report.
Set di dati del grafico
Una delle proprietà comuni a tutti i tipi di grafico è <dataset> elemento. I set di dati del grafico aiutano a mappare i dati del report e a recuperare i dati del grafico in fase di esecuzione. Ogni tipo di grafico contiene diversi sottoelementi per definire le espressioni del grafico. Queste espressioni definiscono i dati utilizzati per generare il grafico. Tutti questi sottoelementi contengono un elemento <dataset> che definisce quando le espressioni del grafico vengono valutate e reimpostate.
Diversi tipi di set di dati del grafico sono disponibili in JasperReports perché ogni tipo di grafico funziona con determinati set di dati: Torta, Categoria, XY, Serie temporali, Periodo, XYZ e Alto-Basso. Ciascuno di questi tipi di set di dati implementa l' interfaccia net.sf.jasperreports.engine.JRChartDataset che definisce i set di dati del grafico. Tutti i set di dati del grafico vengono inizializzati e incrementati allo stesso modo; tuttavia, differiscono solo nel tipo di dati o serie di dati che mappano.
Proprietà del set di dati
La tabella riportata di seguito riassume gli attributi dell'elemento <dataset> -
Attributo | Descrizione | Valori |
---|---|---|
resetType | Questo attributo determina quando il valore dell'espressione del grafico deve essere reimpostato. | Nessuno, Report, Pagina, Colonna, Gruppo. Il valore predefinito èReport. |
resetGroup | Questo attributo determina il nome del gruppo in cui viene reimpostato il valore dell'espressione del grafico. | Il valore di questo attributo deve corrispondere al nome di qualsiasi gruppo dichiarato nel modello di rapporto JRXML. |
incrementType | Questo attributo determina quando ricalcolare il valore dell'espressione del grafico. | Nessuno, Report, Pagina, Colonna, Gruppo. Il valore predefinito è"None". |
incrementGroup | Questo attributo determina il nome del gruppo in cui viene ricalcolata l'espressione del grafico. | Il valore di questo attributo deve corrispondere al nome di un gruppo dichiarato nel modello di rapporto JRXML. |
La tabella seguente riassume i sottoelementi dell'elemento <dataset> -
Elemento secondario | Descrizione |
---|---|
<incrementWhenExpression> | Il modo in cui un set di dati del grafico viene incrementato può essere personalizzato filtrando i dati indesiderati attraverso l'uso di questo elemento secondario. |
<datasetRun> | Contiene le informazioni necessarie per creare un'istanza di un set di dati secondario del report. |
Tipi di set di dati
I tipi di set di dati specifici sono spiegati di seguito:
Pie Dataset
Un set di dati a torta è caratterizzato dalle seguenti espressioni:
<keyExpression>: rappresenta le categorie che comporranno le sezioni nel grafico a torta. Questa espressione può restituire qualsiasi oggetto java.lang.Comparable.
<valueExpression>: produce i valori che corrispondono a ciascuna categoria / chiave nel set di dati. I valori sono sempre oggetti java.lang.Number.
<labelExpression>: se questa espressione è mancante, il grafico visualizzerà le etichette predefinite per ogni sezione nel grafico a torta. Utilizzare questa espressione, che restituisce i valori java.lang.String, per personalizzare le etichette degli elementi per il grafico a torta.
<sectionHyperlink> - imposta i collegamenti ipertestuali associati alle sezioni della torta.
Set di dati di categoria
Un set di dati di categoria è caratterizzato dall'elemento <categorySeries>, che contiene:
<seriesExpression> - indica il nome della serie. Questa espressione può restituire qualsiasi oggetto java.lang.Comparable.
<categoryExpression>: restituisce il nome della categoria per ogni valore all'interno della serie specificata dall'espressione della serie. Le categorie sono oggetti java.lang.Comparable.
<valueExpression>: produce i valori che corrispondono a ciascuna categoria nel set di dati. I valori sono sempre oggetti java.lang.Number.
<labelExpression>: se questa espressione è mancante, il grafico visualizzerà le etichette predefinite per ogni elemento nel grafico. Utilizzare questa espressione, che restituisce i valori java.lang.String, per personalizzare le etichette degli elementi per il grafico.
<itemHyperlink>: imposta i collegamenti ipertestuali associati agli elementi del grafico.
Set di dati XY
Un set di dati XY è caratterizzato dall'elemento <xySeries>, che contiene:
<seriesExpression> - indica il nome della serie. Questa espressione può restituire qualsiasi oggetto java.lang.Comparable.
<xValueExpression> - restituisce il valore java.lang.Number che rappresenta il valore X dalla coppia (x, y) che verrà aggiunta alla serie di dati corrente.
<yValueExpression> - restituisce il valore java.lang.Number che rappresenta il valore Y dalla coppia (x, y) che verrà aggiunta alla serie di dati corrente.
<labelExpression>: se questa espressione è mancante, il grafico visualizzerà le etichette predefinite per ogni elemento nel grafico. Utilizzare questa espressione, che restituisce i valori java.lang.String, per personalizzare le etichette degli elementi per il grafico.
<itemHyperlink>: imposta i collegamenti ipertestuali associati agli elementi del grafico.
Set di dati XYZ
Un set di dati XYZ è caratterizzato dall'elemento <xyzSeries>, che contiene -
<seriesExpression> - indica il nome della serie. Questa espressione può restituire qualsiasi oggetto java.lang.Comparable.
<xValueExpression> - restituisce il valore java.lang.Number che rappresenta il valore X dall'elemento (x, y, z) che verrà aggiunto alla serie di dati corrente.
<yValueExpression> - restituisce il valore java.lang.Number che rappresenta il valore Y dall'elemento (x, y, z) che verrà aggiunto alla serie di dati corrente.
<zValueExpression> - restituisce il valore java.lang.Number che rappresenta il valore Z dall'elemento (x, y, z) che verrà aggiunto alla serie di dati corrente.
<labelExpression>: se questa espressione è mancante, il grafico visualizzerà le etichette predefinite per ogni elemento nel grafico. Utilizzare questa espressione, che restituisce i valori java.lang.String, per personalizzare le etichette degli elementi per il grafico.
<itemHyperlink>: imposta i collegamenti ipertestuali associati agli elementi del grafico.
Set di dati delle serie storiche
Un set di dati di serie temporali è caratterizzato dall'attributo timePeriod e dall'elemento <timeSeries>. L'attributo timePeriod specifica il tipo di serie di dati all'interno del set di dati. Le serie temporali possono contenere valori numerici associati a giorni, mesi, anni o altri periodi di tempo predefiniti. I valori possibili sono: Anno, Trimestre, Mese, Settimana, Giorno: questo è il valore predefinito, Ora, Minuti, Secondi, Millisecondi.
L'elemento <timeSeries> contiene -
<seriesExpression> - indica il nome della serie. Questa espressione può restituire qualsiasi oggetto java.lang.Comparable.
<timePeriodExpression> - restituisce un valore java.util.Date da cui il motore estrarrà il periodo di tempo corrispondente a seconda del valore impostato per l'attributo timePeriod menzionato sopra.
<valueExpression> - restituisce il valore java.lang.Number da associare al valore del periodo di tempo corrispondente quando si incrementa la serie corrente del set di dati.
<labelExpression>: se questa espressione è mancante, il grafico visualizzerà le etichette predefinite per ogni elemento nel grafico. Utilizzare questa espressione, che restituisce i valori java.lang.String, per personalizzare le etichette degli elementi per il grafico.
<itemHyperlink>: imposta i collegamenti ipertestuali associati agli elementi del grafico.
Set di dati del periodo di tempo
Un set di dati di un periodo di tempo è caratterizzato dall'elemento <timePeriodSeries>, che contiene:
<seriesExpression> - indica il nome della serie. Questa espressione può restituire qualsiasi oggetto java.lang.Comparable.
<startDateExpression>: specifica l'inizio dell'intervallo di date a cui verrà associato il valore numerico quando viene aggiunto alla serie di periodi temporali.
<endDateExpression>: specifica la fine dell'intervallo di date a cui verrà associato il valore numerico quando viene aggiunto alla serie di periodi temporali.
<valueExpression> - restituisce il valore java.lang.Number da associare all'intervallo di data corrente specificato dalle espressioni della data di inizio e della data di fine.
<labelExpression>: se questa espressione è mancante, il grafico visualizzerà le etichette predefinite per ogni elemento nel grafico. Utilizzare questa espressione, che restituisce i valori java.lang.String, per personalizzare le etichette degli elementi per il grafico.
<itemHyperlink>: imposta i collegamenti ipertestuali associati agli elementi del grafico.
Set di dati alto basso
Un set di dati alto basso è caratterizzato dalle seguenti espressioni:
<seriesExpression> - attualmente, solo una serie è supportata all'interno di un grafico High-Low o Candlestick. Tuttavia, questa singola serie deve essere identificata da un valore java.lang.Comparable restituito da questa espressione e deve essere utilizzata anche come nome della serie nella legenda del grafico.
<dateExpression> - restituisce la data a cui si riferisce l'elemento corrente (massimo, minimo, apertura, chiusura, volume).
<highExpression> - restituisce un valore java.lang.Number, che farà parte dell'elemento dati aggiunto alla serie quando il set di dati viene incrementato.
<lowExpression> - restituisce un valore java.lang.Number, che farà parte dell'elemento dati aggiunto alla serie quando il set di dati viene incrementato.
<openExpression> - restituisce un valore java.lang.Number, che farà parte dell'elemento dati aggiunto alla serie quando il set di dati viene incrementato.
<closeExpression> - restituisce un valore java.lang.Number, che farà parte dell'elemento dati aggiunto alla serie quando il set di dati viene incrementato.
<volumeExpression>: un'espressione numerica che restituisce il valore del volume da utilizzare per l'elemento dati corrente. Viene utilizzato solo per i grafici Candlestick.
<itemHyperlink>: imposta i collegamenti ipertestuali associati agli elementi del grafico.
Set di dati di valore
Si tratta di un'implementazione speciale del set di dati del grafico che contiene un singolo valore e viene utilizzata per il rendering dei grafici del misuratore e del termometro. Il valore viene raccolto utilizzando l'espressione <valueExpression>.
Grafici grafici
Un altro elemento JRXML comune a tutti i tipi di grafici è il <plot> elemento. Questo ci permette di definire molte delle caratteristiche del grafico come l'orientamento e il colore di sfondo. I grafici differiscono, in base al tipo di grafico.
Attributo di trama
La tabella riportata di seguito riassume gli attributi dell'elemento <plot> -
Attributo | Descrizione | Valori |
---|---|---|
colore di sfondo | Questo attributo definisce il colore di sfondo del grafico. | Qualsiasi valore esadecimale a sei cifre è un valore valido per questo attributo. Il valore esadecimale deve essere preceduto da un #. |
orientamento | Questo attributo definisce l'orientamento del grafico. | Orizzontale, verticale Il valore predefinito è "Verticale" |
backgroundAlpha | Questo attributo definisce la trasparenza del colore di sfondo del grafico. | I valori validi per questo attributo includono qualsiasi numero decimale compreso tra 0 e 1, inclusi. Più alto è il numero, meno trasparente sarà lo sfondo. Il valore predefinito è "1." |
primo piano Alpha | Questo attributo definisce la trasparenza dei colori di primo piano del grafico. | I valori validi per questo attributo includono qualsiasi numero decimale compreso tra 0 e 1, inclusi. Più alto è il numero, meno trasparente sarà lo sfondo. Il valore predefinito è "1." |
labelRotation | Questo attributo consente la rotazione delle etichette di testo sull'asse x per ruotare in senso orario o antiorario. Questo attributo si applica solo ai grafici per i quali l'asse x non è numerico o non visualizza le date. | Il valore predefinito è "0,0". |
L'elemento <plot> ha un sottoelemento <seriesColor> i cui attributi sono: seriesOrder e color . Questo elemento personalizza i colori per le serie e la loro posizione all'interno della sequenza di colori.
Impostazioni specifiche per i grafici
piePlot - Non ha impostazioni specifiche
pie3DPlot- Contiene l' attributo depthFactor , un valore numerico compreso tra 0 e 1 che rappresenta la profondità della torta come percentuale dell'altezza dell'area del tracciato.
barPlot - È possibile mostrare o nascondere le etichette di graduazione, i segni di graduazione o le etichette degli elementi e fornisce le impostazioni per entrambi gli assi.
bar3DPlot - Fornisce le stesse impostazioni di barPlot e genera un effetto 3D utilizzando gli attributi xOffset e yOffset.
linePlot - È possibile mostrare o nascondere le linee che collegano i punti degli elementi, mostrare o nascondere le forme associate ai punti degli elementi e fornire le impostazioni per entrambi gli assi.
scatterPlot - Simile al linePlot, può mostrare o nascondere le linee che collegano i punti degli elementi, può mostrare o nascondere le forme associate ai punti degli elementi e fornisce le impostazioni per entrambi gli assi.
areaPlot - Fornisce impostazioni per entrambi gli assi.
bubblePlot - È possibile impostare le dimensioni della bolla impostando l'attributo scaleType e fornire le impostazioni per entrambi gli assi.
timeSeriesPlot - È possibile mostrare o nascondere le linee che collegano i punti degli elementi, mostrare o nascondere le forme associate ai punti degli elementi e fornire le impostazioni per entrambi gli assi.
highLowPlot - È possibile mostrare o nascondere i tick aperti, mostrare o nascondere i tick chiusi e fornire le impostazioni per entrambi gli assi.
candlestickPlot - È possibile mostrare o nascondere il volume e fornire le impostazioni per entrambi gli assi.
meterPlot - Contiene impostazioni specifiche per la forma del quadrante, l'angolo di scala, le unità di misura, l'intervallo di tick, il colore del quadrante, il colore dell'ago, il colore del tick, il carattere di visualizzazione del valore, il modello di colore e formato, l'intervallo di dati e gli intervalli del contatore.
thermometerPlot - Contiene impostazioni specifiche per la posizione del valore, il colore del mercurio, mostra / nascondi linee di valore, carattere di visualizzazione del valore, modello di colore e formato, intervallo di dati, intervallo basso, intervallo medio e intervallo alto.
multiAxisChart - Contiene impostazioni specifiche per l'asse incluso nel grafico.
Tipi di grafici
JasperReports offre supporto integrato per diversi tipi di grafici. Sono elencati come di seguito:
pieChart - Una combinazione di un set di dati a torta e un grafico a torta.
pie3DChart - Raggruppa un set di dati Pie e un grafico Pie 3D.
barChart - Una combinazione di base di un set di dati di categoria e un grafico a barre.
bar3DChart - Avvolge un set di dati di categoria e un grafico a barre 3D.
xyBarChart - Supporta dataset di periodi temporali, dataset di serie storiche e dataset XY e utilizza un grafico a barre per eseguire il rendering dell'asse e degli elementi.
stackedBarChart - Utilizza i dati di un set di dati di categoria e ne esegue il rendering utilizzando un grafico a barre.
stackedBar3DChart - Utilizza i dati di un set di dati di categoria e ne esegue il rendering utilizzando un grafico a barre 3D.
lineChart - Raggruppa un set di dati di categoria e un grafico a linee.
xyLineChart - Raggruppa un set di dati XY e un grafico a linee.
areaChart - Gli elementi di un dataset di categoria vengono renderizzati utilizzando un grafico ad area.
stackedAreaChart - Gli elementi di un dataset di categoria vengono renderizzati utilizzando un grafico ad area.
xyAreaChart - Utilizza i dati di un set di dati XY e li rende tramite un grafico ad area.
scatterChart - Avvolge un set di dati XY con un grafico a dispersione.
bubbleChart - Combina un set di dati XYZ con un grafico a bolle.
timeSeriesChart - Raggruppa un set di dati delle serie storiche e un grafico delle serie storiche.
highLowChart - Una combinazione di un set di dati High-Low e un grafico High-Low.
candlestickChart - Utilizza i dati da un set di dati High-Low ma con uno speciale grafico Candlestick.
meterChart - Visualizza un singolo valore da un dataset Value su un quadrante, utilizzando le opzioni di rendering da un grafico Meter.
thermometerChart - Visualizza il singolo valore in un set di dati valore utilizzando le opzioni di rendering da un grafico termometro.
multiAxisChart - Contiene più assi di intervallo, che condividono tutti un asse di dominio comune.
Esempio
Per dimostrare i grafici, scriviamo un nuovo modello di report (jasper_report_template.jrxml). Qui aggiungeremo il <barChart> nella sezione <pageHeader> e <pieChart> alla sezione <summary>. Mostreremmo in grafici i voti ottenuti per ogni materia. Salvalo nella directoryC:\tools\jasperreports-5.0.1\test. I contenuti del file sono i seguenti:
<?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>
I dettagli del file di cui sopra sono indicati di seguito:
L'elemento JRXML utilizzato per creare un grafico a barre è </barChart> in <pageHeader>. Contiene un sottoelemento </chart>, che contiene un sottoelemento <reportElement> che definisce le dimensioni e la posizione del grafico.
L'elemento <dataset> in un grafico a barre deve essere racchiuso tra gli elementi <categoryDataset> e </categoryDataset> JRXML.
<categoryDataset> deve contenere un elemento <categorySeries>. Questo elemento definisce quale elemento dati rappresenteranno le barre (nomi dei soggetti, in questo esempio).
<categoryDataset> deve contenere anche un elemento, che definisce come i dati verranno separati in categorie per il confronto. Qui, i dati sono separati dai nomi dei soggetti.
L'elemento <valueExpression> definisce quale espressione viene utilizzata per determinare il valore di ogni barra nel grafico. Qui stiamo usando i "segni".
Per il grafico a torta, abbiamo utilizzato l'elemento <pieChart> nella sezione <summary>. Contiene un sottoelemento </chart>.
Il sottoelemento contiene un'espressione di report che indica cosa utilizzare come chiave nel grafico. Qui abbiamo usato subjectName.
Il sottoelemento contiene un'espressione utilizzata per calcolare il valore per la chiave. Qui abbiamo usato i marchi.
I codici Java per la compilazione del report rimangono invariati. Il contenuto del fileC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java sono come indicato di seguito -
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();
}
}
}
Poiché visualizzeremmo i voti ottenuti per ogni soggetto, POJO deve essere cambiato. Il fileC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java i contenuti sono i seguenti:
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;
}
}
Anche il contenuto del file C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java devono essere aggiornati come indicato di seguito -
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;
}
}
Generazione di report
Successivamente, compiliamo ed eseguiamo i file sopra utilizzando il nostro normale processo di compilazione ANT. I contenuti del file build.xml (salvato nella directory C: \ tools \ jasperreports-5.0.1 \ test) sono i seguenti.
Il file di importazione - baseBuild.xml viene prelevato dal capitolo Configurazione dell'ambiente e dovrebbe essere posizionato nella stessa directory di 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>
Quindi, apriamo la finestra della riga di comando e andiamo alla directory in cui si trova build.xml. Infine, esegui il comandoant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport è la destinazione predefinita) come segue:
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
Come risultato della compilazione sopra, si apre una finestra di JasperViewer come nella schermata qui sotto -
Qui, vediamo che il grafico a barre viene creato nell'intestazione della pagina e il grafico a torta viene creato nelle sezioni di riepilogo.