Sections de rapport
Nous avons discuté de la structure d'un modèle de rapport simple dans le chapitre Mise en route . Dans le même esprit, JasperReports structure le modèle de rapport en plusieurs sections. Les sections sont des parties du rapport qui ont une hauteur spécifiée et peuvent contenir des objets de rapport tels que des lignes, des rectangles, des images ou des champs de texte.
Le moteur de rapport parcourt les enregistrements virtuels de la source de données de rapport fournie, au moment du remplissage du rapport. En fonction du comportement défini de chaque section, le moteur rend ensuite chaque section de rapport le cas échéant. Par exemple, la section de détail est rendue pour chaque enregistrement de la source de données. Lorsque des sauts de page se produisent, les sections d'en-tête et de pied de page sont rendues selon les besoins.
Dans JasperReports, les sections terminologie et rapport sont également appelées report bands. Les sections sont constituées d'une ou plusieurs bandes. Ces sections sont remplies à plusieurs reprises au moment de la création du rapport et préparent le document final.
Sections principales
Un modèle de rapport dans JasperReports comprend les sections principales suivantes -
<title></title>
<pageheader></pageheader>
<columnheader></columnheader>
<groupheader></groupheader>
<detail></detail>
<groupfooter></groupfooter>
<columnfooter></columnfooter>
<pagefooter></pagefooter>
<lastpagefooter></lastpagefooter>
<summary></summary>
<nodata></nodata>
<background></background>
Le tableau suivant résume chacune des sections -
S.NON | Section et description |
---|---|
1 | Title Cette section n'apparaît qu'une seule fois au début du rapport. |
2 | Page Header Cette section apparaît au début de chaque page du document généré. |
3 | Column Header Cette section apparaît au début de chaque colonne du document généré. Si le rapport n'a qu'une seule colonne définie, les sections d'en-tête et de pied de page de colonne sont ignorées. |
4 | Group Header Cette section est introduite par un groupe de rapports (chapitre Groupes ). Chaque fois que l'expression de regroupement change de valeur, la section d'en-tête de groupe est imprimée au-dessus de la section de détail. Dans le cas où plusieurs groupes sont définis, l'en-tête de groupe est imprimé dans l'ordre de définition du groupe. |
5 | Detail Cette section est répétée pour chaque ligne de données fournie par la source de données du rapport. La section de détail peut être constituée de plusieurs bandes. |
6 | Group Footer Cette section est introduite par un groupe de rapports (chapitre Groupes ). La section de pied de page de groupe est imprimée sous la section de détail avant que la valeur de l'expression de regroupement ne change. Le pied de page du groupe est toujours imprimé pour la dernière ligne de données dans la source de données. Dans le cas où plus d'un groupe est défini, le pied de page du groupe est imprimé dans l'ordre inverse de la définition du groupe. |
sept | Column Footer Cette section apparaît au bas de chaque colonne. Si le nombre de colonnes du rapport est égal à 1, les sections d'en-tête et de pied de page de colonne sont ignorées. |
8 | Page Footer Cette section apparaît au bas de chaque page. |
9 | Last Page Footer Cette section remplace le pied de page normal de la dernière page du rapport. Dans le cas où la section de résumé est également présente, il se peut que ce ne soit pas la toute dernière page du document. Cette section est parfois utile lorsque des informations récapitulatives doivent être affichées au bas de la dernière page. |
dix | Summary Cette section n'apparaît qu'une seule fois à la fin du rapport. |
11 | No Data Cette section est imprimée lorsque la propriété du rapport Quand aucune impression de données est définie sur Aucune section de données . Si la section <noData> est définie dans le modèle de rapport, et si la source de données est vide, alors la section <noData> sera la seule prise en compte au moment du remplissage, et son contenu produira la sortie du rapport. |
12 | Background La section d'arrière-plan est affichée sur chaque page et ne peut pas déborder sur la page suivante. Les éléments placés sur cette section sont évalués au moment de l'initialisation de la page et sont affichés en arrière-plan. Tous les autres objets de page sont affichés au-dessus des objets d'arrière-plan. Cette section est utile pour créer des filigranes de page. |
Relation entre les sections, les éléments et les attributs
Le diagramme suivant montre la relation entre les éléments et les attributs dans une section d'un rapport.
Éléments de la section
Toutes les sections de rapport mentionnées ci-dessus sont facultatives. Mais tout modèle de rapport aura au moins une de ces sections. Chacune de ces sections contient un seul <band> élément comme seul sous-élément. Un <band> peut contenir zéro ou plusieurs sous-éléments suivants -
<line>, <rectangle>, <ellipse>, <image>, <staticText>, <textField>, <subReport> ou <elementGroup>
Chacun de ces éléments doit contenir un seul <reportElement> comme premier élément (sauf elementGroup). Un <reportElement> détermine comment les données sont présentées pour cet élément particulier. Contrairement aux variables et aux paramètres, les éléments de rapport ne doivent pas nécessairement avoir de nom, car normalement, vous n'avez pas besoin d'obtenir un élément individuel dans un modèle de rapport.
Le tableau ci-dessous résume les attributs de <reportElement> -
Attribut | La description | Valeurs valides |
---|---|---|
X | Spécifie la coordonnée x de l'élément de bande. | Une valeur entière indiquant la coordonnée x de l'élément en pixels. Cet attribut est obligatoire. |
y | Spécifie la coordonnée y de l'élément de bande. | Une valeur entière indiquant la coordonnée y de l'élément en pixels. Cet attribut est obligatoire. |
largeur | Spécifie la largeur de l'élément de bande. | Une valeur entière indiquant la largeur de l'élément en pixels. Cet attribut est obligatoire. |
la taille | Spécifie la hauteur de l'élément de bande. | Une valeur entière indiquant la hauteur de l'élément en pixels. Cet attribut est obligatoire. |
clé | Identificateur unique de l'élément de bande. | Une valeur de chaîne unique. |
stretchType | Spécifie comment l'élément s'étire lorsque la bande contenant s'étire | NoStretch (default) - L'élément ne s'étire pas. RelativeToTallestObject - L'élément s'étire pour accueillir l'objet le plus haut de son groupe. RelativeToBand - L'élément s'étire pour s'adapter à la hauteur du bracelet. |
type de position | Spécifie la position de l'élément lorsque la bande s'étire. | Float - L'élément se déplacera en fonction de la taille des éléments environnants. FixRelativeToTop (default) - L'élément conservera une position fixe par rapport au sommet du groupe. FixRelativeToBottom - L'élément conservera une position fixe par rapport au bas de la bande. |
isPrintRepeatedValues | Spécifie si des valeurs répétées sont imprimées. | true (default) - Les valeurs répétées seront imprimées. false - Les valeurs répétées ne seront pas imprimées. |
mode | Spécifie le mode d'arrière-plan de l'élément | Opaque, transparent |
isRemoveLineWhenBlank | Spécifie si l'élément doit être supprimé lorsqu'il est vide et qu'il n'y a pas d'autres éléments dans le même espace horizontal. | vrai faux |
isPrintInFirstWholeBand | Spécifie si l'élément doit être imprimé dans une bande entière, c'est-à-dire une bande qui n'est pas divisée entre les pages ou les colonnes du rapport. | vrai faux |
isPrintWhenDetailOverFlows | Spécifie si l'élément sera imprimé lorsque la bande déborde vers une nouvelle page ou colonne. | vrai faux |
printWhenGroupChanges | Spécifie que l'élément sera imprimé lorsque le groupe spécifié change. | Une valeur de chaîne. |
couleur de premier plan | Spécifie la couleur de premier plan de l'élément. | Soit une valeur RVB hexadécimale précédée du caractère #, soit l'une des valeurs prédéfinies suivantes: noir, bleu, cyan, gris foncé, gris, vert, gris clair, magenta, orange, rose, rouge, jaune, blanc. |
couleur de fond | Spécifie la couleur d'arrière-plan de l'élément. | Identique aux valeurs valides pour la couleur |
Attributs de section
Voici les attributs d'une section de rapport -
la taille
La hauteur de la section spécifie la hauteur en pixels de cette section particulière et est très importante dans la conception globale du rapport.
Imprimer lorsque l'expression
Expression booléenne qui détermine si la section doit être imprimée ou non.
Fractionnement autorisé
Un indicateur indiquant si la section est autorisée à se diviser lorsqu'elle ne tient pas dans la page en cours. Si c'est vrai, la section sera transférée à la page suivante. Notez qu'au cas où la section ne rentrerait pas sur la page suivante, la section sera divisée quelle que soit la valeur de l'indicateur. splitType peut prendre les valeurs suivantes -
splitType = "Stretch:" Divise le contenu étiré. Si la section s'étend sur la page actuelle (si l'espace disponible est inférieur à la hauteur déclarée), la région qui est ajoutée à la hauteur d'origine est autorisée à se diviser sur la page suivante.
splitType = "Prevent:" Empêche le fractionnement à la première tentative. Si la section ne rentre pas sur la page suivante, la division se produit normalement, car la prévention de la division de bande n'est efficace que lors de la première tentative de division.
splitType = "Immediate:" Fractionner immédiatement. Le groupe est autorisé à se diviser n'importe où sauf au-dessus, son élément le plus haut.
Exemple
Pour illustrer chaque section, écrivons un modèle de rapport (jasper_report_template.jrxml). Enregistrez ce fichier dansC:\tools\jasperreports-5.0.1\testannuaire. Dans ce fichier, nous afficherions un texte dans chacune des sections (dont nous avons discuté ci-dessus). Le contenu du fichier est indiqué ci-dessous -
<?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 = "300" pageHeight = "300"
columnWidth = "300" leftMargin = "0" rightMargin = "0"
topMargin = "0" bottomMargin = "0" >
<title>
<band height = "50">
<textField>
<reportElement x = "100" y = "16" width = "100" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Title"]]>
</textFieldExpression>
</textField>
</band>
</title>
<pageHeader>
<band height = "40">
<textField>
<reportElement mode = "Opaque" x = "100" y = "10"
width = "90" height = "20"/>
<textElement>
<font isBold = "true"/>
</textElement>
<textFieldExpression>
<![CDATA["Page Header"]]>
</textFieldExpression>
</textField>
</band>
</pageHeader>
<columnHeader>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement>
<font isItalic = "true"/>
</textElement>
<textFieldExpression>
<![CDATA["Column Header"]]>
</textFieldExpression>
</textField>
</band>
</columnHeader>
<detail>
<band height ="40">
<textField>
<reportElement mode = "Opaque" x = "100" y = "10"
width = "90" height = "20" backcolor = "#99CCFF"/>
<textElement/>
<textFieldExpression>
<![CDATA["Report Details"]]>
</textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Column Footer"]]>
</textFieldExpression>
</textField>
</band>
</columnFooter>
<pageFooter>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Page Footer"]]>
</textFieldExpression>
</textField>
</band>
</pageFooter>
<lastPageFooter>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Last Page Footer"]]>
</textFieldExpression>
</textField>
</band>
</lastPageFooter>
<summary>
<band height = "40">
<textField>
<reportElement x = "100" y = "10" width = "90" height = "20"/>
<textElement/>
<textFieldExpression>
<![CDATA["Summary"]]>
</textFieldExpression>
</textField>
</band>
</summary>
</jasperReport>
Le code java pour remplir et générer le rapport est donné ci-dessous. Sauvegardons ce fichierJasperReportFill.java dans le répertoire C: \ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint.
package com.tutorialspoint;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
public class JasperReportFill {
public static void main(String[] args) {
String sourceFileName = "C://tools/jasperreports-5.0.1/test/" +
"jasper_report_template.jasper";
try {
JasperFillManager.fillReportToFile(sourceFileName, null,
new JREmptyDataSource());
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Ici, nous utilisons une instance de JREmptyDataSource lors du remplissage des rapports pour simuler une source de données avec un enregistrement, mais avec tous les champs de cet enregistrement unique étant null.
Génération de rapports
Nous compilerons et exécuterons le fichier ci-dessus en utilisant notre processus de construction ANT normal. Le contenu du fichier build.xml (enregistré sous le répertoire C: \ tools \ jasperreports-5.0.1 \ test) est comme ci-dessous.
Le fichier d'importation - baseBuild.xml est extrait du chapitre Configuration de l'environnement et doit être placé dans le même répertoire que le 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>
Ensuite, ouvrons la fenêtre de ligne de commande et allons dans le répertoire où build.xml est placé. Enfin, exécutez la commandeant -Dmain-class=com.tutorialspoint.JasperReportFill (viewFullReport est la cible par défaut) comme suit -
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, defau
[javac] Compiling 1 source file 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.JRXmlDigesterFac
[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.ExtensionsEnviro
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnviro
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 18 minutes 22 seconds
À la suite de la compilation ci-dessus, une fenêtre JasperViewer s'ouvre comme dans l'écran ci-dessous -
Ici, nous pouvons voir dans chacune des sections un texte est imprimé. Il est à noter que comme JRXML contient un élément <lastPageFooter>, il sera affiché dans la dernière page du rapport au lieu de l'élément <pageFooter> affiché. Les éléments <columnHeader> et <columnFooter> ne seront affichés sur le rapport que s'il comporte plus d'une colonne.