Styles de rapport
JasperReports a une fonctionnalité <style> qui permet de contrôler les propriétés du texte dans un modèle de rapport. Cet élément est une collection de paramètres de style déclarés au niveau du rapport. Les propriétés telles que la couleur de premier plan, la couleur d'arrière-plan, si la police est en gras, en italique ou normale, la taille de la police, une bordure pour la police et de nombreux autres attributs sont contrôlées par l'élément <style>. Les styles peuvent étendre d'autres styles et ajouter ou remplacer les propriétés du style parent.
Propriétés du style
Un élément <style> a de nombreux attributs. Certains des plus couramment utilisés sont répertoriés dans le tableau ci-dessous -
S.NON | Attribut et description |
---|---|
1 | name Est obligatoire. Il doit être unique car il fait référence au style de rapport correspondant dans tout le rapport. |
2 | isDefault Indique si ce style est le style par défaut du document. |
3 | style Est une référence au style parent. |
4 | mode Spécifie la transparence de l'élément. Les valeurs possibles sont Opaque et Transparent . |
5 | forecolor Est la couleur de premier plan de l'objet. |
6 | backcolor Est la couleur d'arrière-plan de l'objet. |
sept | fill Détermine le motif de remplissage utilisé pour remplir l'objet. Pour le moment, la valeur unique autorisée est Solid . |
6 | radius Spécifie le rayon de l'arc d'angle du rectangle. |
sept | scaleImage Spécifie l'échelle des images uniquement. Valeurs possibles: Clip, FillFrame, RetainShape, RealHeight et RealSize . |
8 | hAlign Spécifie l'alignement horizontal. Valeurs possibles: Left, Center, Right et Justified . |
9 | vAlign Spécifie l'alignement vertical. Valeurs possibles: Haut, Milieu et Bas . |
dix | rotation Spécifie la rotation de l'élément. Valeurs possibles: None, Left, Right et UpsideDown . |
11 | lineSpacing Spécifie l'espacement des lignes entre les lignes de texte. Valeurs possibles: Single, 1_1_2, Double . |
12 | markup Spécifie le style de balisage pour les textes stylisés. |
13 | fontName Spécifie le nom de la police. |
14 | fontSize Spécifie la taille de la police. |
15 | isBold Indique si le style de police est en gras. |
16 | isItalic Indique si le style de police est en italique. |
17 | isUnderline Indique si le style de police est souligné. |
18 | isStrikeThrough Indique si le style de police est barré. |
19 | pdfFontName Spécifie le nom de la police PDF associée. |
20 | pdfEncoding Spécifie le codage des caractères pour le format de sortie PDF. |
22 | isPdfEmbedded Indique si la police PDF est incorporée. |
23 | pattern Spécifie le modèle de format des textes formatés. |
24 | isBlankWhenNull Indique si une chaîne vide (espace) doit être affichée si l'expression est évaluée à null. |
Styles conditionnels
Dans certaines situations, un style ne doit être appliqué que lorsque certaines conditions sont remplies (par exemple, pour alterner les couleurs de lignes adjacentes dans une section de détail de rapport). Ceci peut être réalisé en utilisant des styles conditionnels.
Un style conditionnel comporte deux éléments -
- une expression de condition booléenne
- un style
Le style est utilisé uniquement si la condition est évaluée à vrai .
Application de styles aux éléments de rapport
Tout type d'élément de rapport peut référencer une définition de style de rapport à l'aide de l'attribut style. Par conséquent, toutes les propriétés de style déclarées par la définition de style qui sont applicables à l'élément actuel seront héritées. Pour remplacer les valeurs héritées, les propriétés de style spécifiées au niveau de l'élément de rapport peuvent être utilisées.
Modèles de style
Nous pouvons faire un ensemble de rapports avec un aspect commun en définissant le style à un endroit commun. Ce modèle de style commun peut ensuite être référencé par les modèles de rapport. Un modèle de style est un fichier XML qui contient une ou plusieurs définitions de style. Fichiers de modèle de style utilisés par convention*.jrtx extension, mais ce n'est pas obligatoire.
Un modèle de style contient les éléments suivants -
<jasperTemplate> - Il s'agit de l'élément racine d'un fichier de modèle de style.
<template> - Cet élément est utilisé pour inclure des références à d'autres fichiers de modèle. Le contenu de cet élément est interprété comme l'emplacement du fichier modèle référencé.
<style> - Cet élément est identique à l'élément portant le même nom des modèles de conception de rapport (fichiers JRXML), à l'exception du fait qu'un style dans un modèle de style ne peut pas contenir de styles conditionnels. Cette limitation est due au fait que les styles conditionnels impliquent des expressions de rapport et que les expressions ne peuvent être interprétées que dans le contexte d'une seule définition de rapport.
Les références aux modèles de style sont incluses dans les rapports JRXML en tant qu'éléments <template>. Les modèles de style sont chargés au moment du remplissage du rapport et les références de nom de style sont résolues une fois que tous les modèles ont été chargés. Lors du chargement des modèles de style et de la résolution des noms de style en styles, un arbre / graphique de modèles de style est créé, le haut de l'arborescence étant l'ensemble des styles définis dans le rapport. Dans cette arborescence, les références de nom de style sont résolues au dernier style qui correspond au nom dans un parcours en profondeur.
Exemple
Essayons les styles conditionnels et les modèles de style. Ajoutons le <style> élément alternateStyleà notre modèle de rapport existant (Chapter Report Designs ). En fonction de la condition, la couleur de la police passe au bleu pour un nombre égal. Nous avons également inclus un modèle de style"styles.jrtx". Le modèle de rapport révisé (jasper_report_template.jrxml) est le suivant. Enregistrez-le dans le répertoire C: \ tools \ jasperreports-5.0.1 \ test -
<?xml version = "1.0"?>
<!DOCTYPE jasperReport PUBLIC
"//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<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 = "842" columnWidth = "515"
leftMargin = "40" rightMargin = "40" topMargin = "50" bottomMargin = "50">
<template>"styles.jrtx"</template>
<style name = "alternateStyle" fontName = "Arial" forecolor = "red">
<conditionalStyle>
<conditionExpression>
<![CDATA[new Boolean($V{countNumber}.intValue() % 2 == 0)]]>
</conditionExpression>
<style forecolor = "blue" isBold = "true"/>
</conditionalStyle>
</style>
<parameter name = "ReportTitle" class = "java.lang.String"/>
<parameter name = "Author" class = "java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name = "country" class = "java.lang.String">
<fieldDescription><![CDATA[country]]></fieldDescription>
</field>
<field name = "name" class = "java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<variable name = "countNumber" class = "java.lang.Integer" calculation = "Count">
<variableExpression><![CDATA[Boolean.TRUE]]></variableExpression>
</variable>
<title>
<band height = "70">
<line>
<reportElement x = "0" y = "0" width = "515" height = "1"/>
</line>
<textField isBlankWhenNull = "true" bookmarkLevel = "1">
<reportElement x = "0" y = "10" width = "515" height = "30"/>
<textElement textAlignment = "Center">
<font size = "22"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{ReportTitle}]]>
</textFieldExpression>
<anchorNameExpression><![CDATA["Title"]]></anchorNameExpression>
</textField>
<textField isBlankWhenNull = "true">
<reportElement x = "0" y = "40" width = "515" height = "20"/>
<textElement textAlignment = "Center">
<font size = "10"/>
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$P{Author}]]>
</textFieldExpression>
</textField>
</band>
</title>
<columnHeader>
<band height = "23">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "3"
width = "535" height = "15" backcolor = "#70A9A9" />
<box>
<bottomPen lineWidth = "1.0" lineColor = "#CCCCCC" />
</box>
<textElement />
<text>
<![CDATA[]]>
</text>
</staticText>
<staticText>
<reportElement x = "414" y = "3" width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Country]]></text>
</staticText>
<staticText>
<reportElement x = "0" y = "3" width = "136" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font isBold = "true" />
</textElement>
<text><![CDATA[Name]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height = "16">
<staticText>
<reportElement mode = "Opaque" x = "0" y = "0"
width = "535" height = "14" backcolor = "#E5ECF9" />
<box>
<bottomPen lineWidth = "0.25" lineColor = "#CCCCCC" />
</box>
<textElement />
<text>
<![CDATA[]]>
</text>
</staticText>
<textField>
<reportElement style = "alternateStyle" x = "414" y = "0"
width = "121" height = "15" />
<textElement textAlignment = "Center" verticalAlignment = "Middle">
<font size = "9" />
</textElement>
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{country}]]>
</textFieldExpression>
</textField>
<textField>
<reportElement x = "0" y = "0" width = "136" height = "15"
style = "Strong"/>
<textElement textAlignment = "Center" verticalAlignment = "Middle" />
<textFieldExpression class = "java.lang.String">
<![CDATA[$F{name}]]>
</textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Le contenu du modèle de style styles.jrtxsont les suivants. Enregistrez-le dans le répertoire C: \ tools \ jasperreports-5.0.1 \ test.
<?xml version = "1.0"?>
<!DOCTYPE jasperTemplate PUBLIC "-//JasperReports//DTD Template//EN"
"http://jasperreports.sourceforge.net/dtds/jaspertemplate.dtd">
<jasperTemplate>
<style name = "Strong" isBold = "true" pdfFontName = "Helvetica-Bold"
backcolor = "lightGray forecolor = "green"/>
</jasperTemplate>
Les codes java pour le remplissage des rapports restent inchangés. Le contenu du fichierC:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\JasperReportFill.java sont comme indiqué ci-dessous -
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();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
Le contenu du fichier POJO C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBean.java sont comme ci-dessous -
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
Le contenu du fichier C:\tools\jasperreports-5.0.1\test\src\com\tutorialspoint\DataBeanList.java sont comme ci-dessous -
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList<DataBean> getDataBeanList() {
ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
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 indiqué 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 -
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 build.sysclasspath=last;
set to false for repeatable builds
[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.
À la suite de la compilation ci-dessus, une fenêtre JasperViewer s'ouvre comme indiqué dans l'écran ci-dessous -
Ici, nous pouvons voir que la couleur de la police est changée en bleu pour un nombre pair (dans le pays de la colonne). Dans le nom de la colonne, la couleur de la police devient verte (ce style est référencé à partir du modèle de style).