Beruflich Dokumente
Kultur Dokumente
Guide dutilisation
LISTE DE DIFFUSION
Organisation Nom Info Commentaire Validation
Page 2/73
SOMMAIRE
1
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9
PRESENTATION DE JASPERREPORTS..................................................................................... 4
Quest ce que JasperReports ? ........................................................................................................... 4 Structure de page flexible .................................................................................................................. 4 Plusieurs facons de prsenter les donnes .......................................................................................... 5 Plusieurs faons de fournir les donnes .............................................................................................. 6 Sous rapports.................................................................................................................................... 6 Export .............................................................................................................................................. 6 Dpendances .................................................................................................................................... 7 Utilisation typique.............................................................................................................................. 7 Fonctionnalits avances ................................................................................................................... 8
2
2.1
3
3.1 3.2 3.3
4.1 Rapport associ une base de donnes ............................................................................................17 4.1.1 Configuration de la connexion ....................................................................................................18 4.1.2 Inscription de la requte ............................................................................................................19 4.1.3 Mise en page du modle ............................................................................................................21 4.1.4 Paramtrage de la requte .........................................................................................................25 4.2 Rapport associ une source de donnes..........................................................................................28 4.2.1 Rapport associ des objets Java ..............................................................................................29 4.2.2 Rapport associ un fichier XML ................................................................................................34
5
5.1 5.2 5.3 5.4 5.5 5.6 5.7
DOCUMENTS DE REFERENCE
Version Titre
Page 3/73
1 PRESENTATION DE JASPERREPORTS
JasperReports permet le contrle dynamique de cette structure en fonction du contenu du rapport, en laissant la possibilit par exemple dafficher ou non des donnes en fonction de paramtres du rapport. Les donnes peuvent galement tre rassembles dans des sections logiques, appeles groupes, en fonction de leurs valeurs. La dfinition de groupes de donnes peut galement servir calculer des moyennes ou pourcentages sur ces donnes.
Page 4/73
les courbes
Ds lments graphiques de bases peuvent galement trs facilement tre ajouts aux rapports (image, ligne, rectangle, ellipse, ) pour lagrmenter.
Page 5/73
Les donnes peuvent tre rcupres dans une de base de donnes, par lintermdiaire dune connexion JDBC fournie au rapport. Les requtes de rcupration des donnes seront inscrites dans le rapport.
Enfin, les donnes peuvent aussi tre fournies en utilisant des classes spcifiques de la librairie appeles datasources (sources de donnes), implmentant une interface commune. JasperReports inclus un certain nombre de datasource, permettant dutiliser comme source de donnes pour le rapport : Des resultSet JDBC Des objets de type Map Des beans Java Des fichiers XML
Il est galement ais, en cas de besoin spcifique, de raliser sa propre datasource, en implmentant linterface commune toutes ces classes.
1.6 EXPORT
JasperReports propose lexport de ces rapports dans de nombreux formats : PDF XLS (Excel) RTF ODF HTML
Page 6/73
Pour tous ces formats, la librairie propose lexportation directement sous la forme dun flux de donnes, qui pourra par exemple tre directement affich dans un navigateur Internet par exemple, ou lenregistrement dans un fichier.
1.7 DEPENDANCES
JasperReports sappuie sur plusieurs librairies Java open source pour implmenter ses fonctionnalits, parmi lesquelles : iText pour la gnration de PDF JFreeChart pour la gnration de diagrammes et graphiques Jakarta POI pour la gnration de documents Microsoft Office JAXP pour le parsing et la transformation de XML
Page 7/73
Un rapport est dcrit dans un modle de rapport au format XML. Ces modles peuvent tre crits la main ou gnrer par des outils graphiques comme iReport, qui sera prsenter par la suite. Ces fichiers XML portent lextension .jrxml. Ces modles au format XML sont ensuite compils dans un format binaire. Cette compilation peut ce faire soit programmatiquement via une API, soit via une tache ANT. Le rsultat de cette compilation est un fichier Jasper qui porte lextension .jasper. Ce rapport compil est ensuite renseign avec les donnes afficher (le terme filled est utiliser en anglais dans la documentation). Ce rapport renseign est appel impression Jasper et peut ventuellement tre sauv tel quel dans un fichier lextension .jrprint. Cette impression Jasper sera plus certainement ensuite exporte dans un des formats proposs par JasperReports.
Page 8/73
2 PRESENTATION DE IREPORT
IReport permet une prise en main complte de JasperReports via son interface graphique, par son support complet des tags XML de la librairie, une interface WYSIWYG pour tous les lments graphiques, un diteur dexpressions, la gestion des sous rapports.
Un module intgr dexportation, associ un support des connexions JDBC et des datasources JasperReports, permet galement de tester le rendu des rapports directement depuis le logiciel.
IReport apporte JasperReports un gain de productivit non ngligeable, une fois loutil pris en main, par rapport dautres solutions de reporting pour Java non outilles.
Page 9/73
IReport nest pas le seul outil ddition existant pour JasperReport. On peut citer les logiciels suivants : JasperAssistant (plugin Eclipse, payant) JasperPal (stand-alone, gratuit) IReport est nanmoins lditeur officiel de JasperReports, ralis et support par la mme quipe que la librairie de reporting (iReport tait la base un projet indpendant, avant de voir sa popularit reconnatre par JasperSoft et lauteur du logiciel embauch par la socit).
Page 10/73
Page 11/73
Ce modle est un fichier XML, dont voici le code source juste aprs son initialisation par iReport :
<?xml version="1.0" encoding="UTF-8" ?> <!-- Created with iReport - A designer for JasperReports --> <!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperReport name="PremierRapport" columnCount="1" printOrder="Vertical" orientation="Portrait" pageWidth="595" pageHeight="842" columnWidth="535" columnSpacing="0" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" whenNoDataType="BlankPage" isTitleNewPage="false" isSummaryNewPage="false"> <property name="ireport.scriptlethandling" value="2" /> <property name="ireport.encoding" value="UTF-8" /> <import value="java.util.*" /> <import value="net.sf.jasperreports.engine.*" /> <import value="net.sf.jasperreports.engine.data.*" />
<background> <band height="0" isSplitAllowed="true" > </band> </background> <title> <band height="50" isSplitAllowed="true" > </band> </title> <pageHeader> <band height="50" isSplitAllowed="true" > </band> </pageHeader> <columnHeader> <band height="30" isSplitAllowed="true" > </band> </columnHeader> <detail> <band height="100" </band> </detail> <columnFooter> isSplitAllowed="true" >
Page 12/73
<band height="30" </band> </columnFooter> <pageFooter> <band height="50" </band> </pageFooter> <lastPageFooter> <band height="50" </band> </lastPageFooter> <summary> <band height="50" </band> </summary> </jasperReport>
isSplitAllowed="true" >
isSplitAllowed="true" >
isSplitAllowed="true" >
isSplitAllowed="true" >
On y remarque le tag englobant de tout modle de rapport, jasperReport, et les tags des diffrents lments constituant un modle de rapport : background : pour dfinir la fond des pages du rapport, peut tre une image, du texte, ou un lment du type watermark. title : pour dfinir le titre du rapport, qui apparat une seule fois au dbut du rapport pageHeader : pour dfinir lentte de page, qui apparat au dbut de chaque page columnHeader : pour dfinir lentte de colonne detail : pour dfinir le dtail du contenu du rapport, le contenu de cet lment est rpt pour chaque enregistrement de la datasource du rapport columnFooter : pour dfinir le pied de colonne pageFooter : pour dfinir le pied de page, qui apparat la fin de chaque page lastPageFooter : pour dfinir le pied de page de la dernire page du rapport, la place du pied de page dfinit dans llment pageFooter summary : pour dfinir le rsum du rapport, qui apparat une seule fois la fin du rapport
Dans ce premier rapport, nous allons afficher un texte statique (c'est--dire non dynamique). Pour cela, on slectionne loutil Texte Statique de iReport et on dessine dans la section detail du rapport un rectangle reprsentant notre zone de texte. Le texte sera ensuite modifiable en double cliquant sur llment.
Page 13/73
Le code source de notre section detail a maintenant la forme suivante : <detail> <band height="100" isSplitAllowed="true" > <staticText> <reportElement x="9" y="9" width="111" height="20" key="staticText-1"/> <box></box> <textElement> <font/> </textElement> <text><![CDATA[Notre premier rapport]]></text> </staticText> </band> </detail>
Page 14/73
staticText : pour dfinir un texte statique, qui ne dpend ainsi daucune datasource, variable, paramtre ou expression reportElement : pour dfinir la position et la taille dun lment. text : pour dfinir le texte affich par la zone de texte statique
Page 15/73
Pour une utilisation de JasperReports en mode projet, lors duquel un nombre important de modle de rapport peuvent tre crit, JasperReports propose une tche ANT permettant la compilation en masse de modles de rapport. Cette tache se nomme JRC, dfini dans la classe net.sf.jasperreports.ant.JRAntCompileTask. Elle sutilise de la manire suivante :
<project name="Jasper" default="compile"> <description>Jasper</description> <path id="classpath"> <fileset dir="./"> <include name="**/*.jar" /> </fileset> </path> <target name="compile" description="Compile JRXML reports"> <taskdef name="jrc" classname="net.sf.jasperreports.ant.JRAntCompileTask"> <classpath refid="classpath" /> </taskdef> <jrc destdir="./bin/report/jasper"> <src> <fileset dir="./src/report/jasper"> <include name="**/*.jrxml" /> </fileset> </src> <classpath refid="classpath" /> </jrc> </target> </project>
La tche JRC nous permet dindiquer le rpertoire de destination des modles de rapport compils, et la source de ces modles de rapport, ici sous la forme dun fileset.
Page 16/73
Nous allons commencer par crer un rapport affichant la liste des projets contenus dans notre base. Le rapport indiquera le nom du projet, de lentreprise dans laquelle il se droule, et le nom et le prnom de son responsable.
SELECT p.nom_projet,
Page 17/73
e.nom_entreprise, em.nom_employe, em.prenom_employe FROM projet p, entreprise e, employe em WHERE p.id_entreprise = e.id_entreprise AND p.id_responsable = em.id_employe
Nous allons maintenant intgrer cette requte SQL dans notre modle de rapport.
Page 18/73
Une fois cette connexion dfinie, elle sera utilise par iReport comme connexion pour notre rapport afin daccder aux donnes. Dans le cadre de la gnration dun rapport par une application Java, cette connexion JDBC sera cre dans le code puis passe en paramtre la mthode de remplissage du rapport.
Page 19/73
Une fois la requte inscrite, un clic sur bouton Lire les champs va excuter la requte et vrifier la prsence des champs dfinis dans la requte, pour les inscrire dans le rapport et nous permettre de les utiliser pour la ralisation du modle de rapport. Une fois les champs lus, ils sont lists dans la fentre Structure du document de iReport :
Page 20/73
Lajout de cette requte et de ces champs dans le rapport ajoute les lments suivants dans le code XML de ce dernier : <queryString> <![CDATA[SELECT p.nom_projet, e.nom_entreprise, em.nom_employe, em.prenom_employe FROM projet p, entreprise e, employe em WHERE p.id_entreprise = e.id_entreprise AND p.id_responsable = em.id_employe]]> </queryString> <field name="nom_projet" class="java.lang.String"/> <field name="nom_entreprise" class="java.lang.String"/> <field name="nom_employe" class="java.lang.String"/> <field name="prenom_employe" class="java.lang.String"/>
La requte est inscrite dans un tag queryString, puis chacun des champs dans un tag field, prcisant leur type.
Page 21/73
Une mise en page sous forme de tableau a t ralise pour prsenter les donnes. Trois textes statiques ont t ajouts la partie columHeader, reprsentant les enttes de colonnes du tableau. Puis dans la partie detail, les champs ajouts au rapport lors de ltape prcdente ont t ajouts par glisser/dposer depuis la fentre Structure du document. Attardons-nous sur la syntaxe de lappel ces champs :
$F{nom_du_champ}
Cette syntaxe est une expression, au sens iReport. Les expressions sont proches du langage Java, et permettent, entre autre dans ce cas, un affichage plus sophistiqu des donnes, comme ici en concatnant la valeur de deux champs. Le code source XML du rapport est modifi de la manire suivante : <columnHeader> <band height="30" isSplitAllowed="true" > <staticText> <reportElement x="9" y="12" width="99" height="15" key="staticText-1"/> <box></box> <textElement textAlignment="Center"> <font pdfFontName="Helvetica-Bold" isBold="true"/>
Page 22/73
</textElement> <text><![CDATA[Entreprise]]></text> </staticText> <staticText> <reportElement x="119" y="12" width="100" height="15" key="staticText-2"/> <box></box> <textElement textAlignment="Center"> <font pdfFontName="Helvetica-Bold" isBold="true"/> </textElement> <text><![CDATA[Projet]]></text> </staticText> <staticText> <reportElement x="239" y="12" width="220" height="15" key="staticText-3"/> <box></box> <textElement textAlignment="Center"> <font pdfFontName="Helvetica-Bold" isBold="true"/> </textElement> <text><![CDATA[Responsable]]></text> </staticText> </band> </columnHeader> <detail> <band height="33" isSplitAllowed="true" > <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="9" y="5" width="99" height="18" key="textField"/> <box></box> <textElement textAlignment="Center"> <font/> </textElement> <textFieldExpression class="java.lang.String"> <![CDATA[$F{nom_entreprise}]]> </textFieldExpression> </textField> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" >
Page 23/73
<reportElement x="119" y="5" width="100" height="18" key="textField"/> <box></box> <textElement textAlignment="Center"> <font/> </textElement> <textFieldExpression class="java.lang.String"> <![CDATA[$F{nom_projet}]]> </textFieldExpression> </textField> <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="239" y="5" width="220" height="18" key="textField"/> <box></box> <textElement textAlignment="Center"> <font/> </textElement> <textFieldExpression class="java.lang.String"> <![CDATA[$F{nom_employe}+" "+$F{prenom_employe}]]> </textFieldExpression> </textField> </band> </detail>
Observons quoi ressemble notre rapport maintenant, en utilisant la fonctionnalit dexportation de iReport :
Page 24/73
Nous pouvons observer que le contenu de la partie detail est rpt pour chaque enregistrement retourn par la requte de slection incluse dans le rapport.
Page 25/73
Lassistant nous permet dindiquer le nom du paramtre, son type, sa valeur par dfaut, et enfin, par lintermdiaire dune case cocher, si lon souhaite qu lexcution dans iReport, une fentre de dialogue nous demande la valeur que lon souhaite donner ce paramtre (dans le cas contraire, cest la valeur par dfaut qui sera utilise). On retrouve ce paramtre dans le code source du modle de rapport :
Nous allons ensuite pouvoir ensuite utiliser ce paramtre dans la requte SQL de slection des donnes :
Page 26/73
$P{nom_du_paramtre}
Utilisons la fonctionnalit dexport de iReport pour voir notre rapport. A lexcution, si nous lavons demand lors de la cration du paramtre, une fentre de dialogue demandera la valeur que lon souhaite donner au paramtre entreprise :
Page 27/73
Dans le cadre de la gnration dun rapport par une application Java, la valeur des paramtres dun rapport est renseigne sous la forme dun objet de type Map, dans lequel pour chaque enregistrement le nom du paramtre est la cl. Cette Map est ensuite passe en paramtre la mthode de remplissage du rapport, en mme temps que la connexion JDBC la base.
Page 28/73
Une implmentation particulire galement propose est la datasource vide (JREmptyDataSource). En effet, il nest pas possible de crer un rapport sans fournir une connexion ou une datasource. La datasource vide sera ainsi un moyen de fournir une source de donnes un rapport entirement statique, ou dont les lments dynamiques ne serait fournis au rapport que sous forme de paramtres.
Nous allons dcrire dans ce chapitre lutilisation comme source de donnes dobjets Java, et dun fichier XML.
public class Entreprise { /** * Identifiant de l'entreprise */ private Integer idEntreprise = null; /** * Nom de l'entreprise */ private String nomEntreprise = null; /** * Constructeur */ public Entreprise() { } /** * Constructeur * @param idEntreprise l'identifiant de l'entreprise * @param nomEntreprise le nom de l'entreprise */ public Entreprise(Integer idEntreprise, String nomEntreprise) { this.idEntreprise = idEntreprise; this.nomEntreprise = nomEntreprise; } /** * Setter de idEntreprise * @param idEntreprise l'identifiant de l'entreprise
Page 29/73
*/ public void setIdEntreprise(Integer idEntreprise) { this.idEntreprise = idEntreprise; } /** * Getter de idEntreprise * @return l'identifiant de l'entreprise */ public Integer getIdEntreprise() { return idEntreprise; } /** * Setter de nomEntreprise * @param nomEntreprise le nom de l'entreprise */ public void setNomEntreprise(String nomEntreprise) { this.nomEntreprise = nomEntreprise; } /** * Getter de nomEntreprise * @return le nom de l'entreprise */ public String getNomEntreprise() { return nomEntreprise; } }
Page 30/73
iReport se chargera de crer linstance de la datasource correspondante au type de retour de la fabrique, partir de ce retour. Dans le cadre de la gnration dun rapport par une application Java, cette datasource sera cre dans le code puis passe en paramtre la mthode de remplissage du rapport.
Page 31/73
On remarquera que JasperReports permet dutiliser un objet comme proprit dun JavaBeans, et est capable daller chercher les proprits de cet objet pour les ajouter comme champ du rapport. Les proprits slectionnes sont maintenant lists dans la fentre Structure du document de iReport :
Page 32/73
On peut retrouver ces champs dans le code source du modle de rapport : <field name="nomProjet" class="java.lang.String"> <fieldDescription><![CDATA[nomProjet]]></fieldDescription> </field> <field name="nomEntreprise" class="java.lang.String"> <fieldDescription><![CDATA[entreprise.nomEntreprise]]></fieldDescription> </field> <field name="nomEmploye" class="java.lang.String"> <fieldDescription><![CDATA[responsable.nomEmploye]]></fieldDescription> </field> <field name="prenomEmploye" class="java.lang.String"> <fieldDescription><![CDATA[responsable.prenomEmploye]]></fieldDescription> </field>
Page 33/73
Page 34/73
<idEmploye>3</idEmploye> <entreprise> <idEntreprise>2</idEntreprise> <nomEntreprise>Entreprise 2</nomEntreprise> </entreprise> <nomEmploye>Durant</nomEmploye> <prenomEmploye>Pierre</prenomEmploye> </responsable> </projet> <projet> <idProjet>4</idProjet> <nomProjet>Projet 4</nomProjet> <entreprise> <idEntreprise>2</idEntreprise> <nomEntreprise>Entreprise 2</nomEntreprise> </entreprise> <responsable> <idEmploye>4</idEmploye> <entreprise> <idEntreprise>2</idEntreprise> <nomEntreprise>Entreprise 2</nomEntreprise> </entreprise> <nomEmploye>Alart</nomEmploye> <prenomEmploye>Arnaud</prenomEmploye> </responsable> </projet> </projetData>
Page 35/73
Dans le cadre de la gnration dun rapport par une application Java, le chemin vers le fichier XML, ou directement le contenu du fichier, sera pass en paramtre la mthode de remplissage du rapport, en compagnie ou non de la requte XPath, en fonction du choix dcrit ci-dessus.
Page 36/73
Lajout de ces champs dans la fentre Structure du document de iReport est identique au chapitre prcdent, et le rsultat dans le code source sera le suivant :
<queryString language="xPath"><![CDATA[/projetData/projet]]></queryString> <field name="nomProjet" class="java.lang.String"> <fieldDescription><![CDATA[nomProjet]]></fieldDescription> </field> <field name="nomEntreprise" class="java.lang.String"> <fieldDescription><![CDATA[entreprise/nomEntreprise]]></fieldDescription> </field> <field name="nomEmploye" class="java.lang.String"> <fieldDescription><![CDATA[responsable/nomEmploye]]></fieldDescription> </field> <field name="prenomEmploye" class="java.lang.String"> <fieldDescription><![CDATA[responsable/prenomEmploye]]></fieldDescription> </field>
On retrouve le tag queryString, accompagn de lattribut langage, qui inscrit la requte Xpath dans le rapport. Ce tag ne sera prsent que si lajout de le requte dans le rapport y est choisit dans lassistant.
Page 37/73
Les tags du fichier XML ayant le mme nom que les proprits des objets Java du chapitre prcdent, la mise en page du modle de rapport na pas tre modifie pour obtenir le mme rsultat que dans les chapitres prcdents.
Page 38/73
5.1 COLONNES
JasperReports permet de gnrer des rapports possdant plusieurs colonnes. Dans ce contexte, le contenu des sections columnHeader et columnFooter sont rpts pour chacune des colonnes, et le contenu de la section detail devra tre considr comme une cellule de ces colonnes. En gardant notre modle prcdent, affichons la liste de tous les employs du modle, dans un rapport 3 colonnes.
Dans la fentre des proprits du document, on indique le nombre de colonne dont on veut composer le document. La largeur de colonne est mis automatiquement jour pour obtenir 3 colonnes de mme largeur.
Page 39/73
Dans le code source du rapport, la dfinition du nombre de colonnes se fait dans la tag principal du document :
Page 40/73
On y remarque lattribut printOrder. Celui permet dindiquer le sens de remplissage du rapport, vertical comme dans notre exemple, ou horizontal, en lui donnant la valeur Horizontal .
Le regroupement ce fait sur la base dune expression. Plusieurs options de rupture de mise en page existent, nous choisissons de dmarrer une nouvelle colonne.
Le modle de rapport est lgrement modifi pour afficher linitiale en entte de chaque groupe :
Page 41/73
Cet entte est inscrit dans un entte de groupe. Pour chaque groupe, on peut optionnellement dfinir un entte et un pied de groupe afin dafficher un texte ou autre au dbut et la fin de laffichage de chaque groupe.
Page 42/73
<group
name="Initial" isStartNewColumn="true" > <groupExpression> <![CDATA[$F{nomEmploye}.substring(0,1)]]> </groupExpression> <groupHeader> <band height="31" isSplitAllowed="true" > <textField isStretchWithOverflow="false" isBlankWhenNull="false" evaluationTime="Now" hyperlinkType="None" hyperlinkTarget="Self" > <reportElement x="8" y="5" width="166" height="21" key="textField-1"/> <box></box> <textElement> <font pdfFontName="Helvetica-Bold" size="12" isBold="true"/> </textElement> <textFieldExpression class="java.lang.String">
Page 43/73
<![CDATA[$F{nomEmploye}.substring(0,1)]]> </textFieldExpression> </textField> </band> </groupHeader> <groupFooter> <band height="0" </band> </groupFooter> </group>
isSplitAllowed="true" >
5.3 VARIABLES
Afin de factoriser le calcul dune expression pouvant tre raliser plusieurs fois dans un mme rapport, JasperReports offre la possibilit de dclarer des variables au sein dun rapport. On accde lcran de gestion des variables par licne ou le menu Afficher > Variables.
On remarque ds prsent les variables intgrs chaque rapport : PAGE_NUMBER : contient le nombre total de pages du rapport COLUMN_NUMBER : contient le nombre courant de colonnes REPORT_COUNT : contient le nombre denregistrements dj traits PAGE_COUNT : contient le nombre denregistrements dj traits dans la page courante COLUMN_COUNT : contient le nombre denregistrement dj traits dans la colonne courante <nomGroupe>_COUNT : contient le nombre denregistrement dj traits dans la groupe courant Ces variables seront uniquement accessible en lecture pour lutilisateur. Lutilisateur peut dfinir ses propres variables en cliquant sur le bouton Nouveau :
Page 44/73
Plusieurs attributs permettent un contrle sur lvolution de la valeur de la variable, notamment : Type de calcul : indique que type de calcul va tre fait sur la variable lors du remplissage du rapport. Les valeurs possibles sont : o o o o o o o o o o o Rien (pas de calcul) Dcompte Dcompte distinct Somme Moyenne Plus basse Plus lev Ecart standard Ecart Systme (calcul dfini par lutilisateur, par exemple via une scriptlet) Premier (la premire valeur rencontre)
Page 45/73
Rinitialiser le type : indique quelle occasion la variable doit tre rinitialiser. Les valeurs possibles sont : o o o o o Nant (pas dinitialisation) Rapport (initialiser une fois au dbut du rapport) Page (initialiser au dbut de chaque page) Colonne (initialiser au dbut de chaque colonne) Groupe (initialiser au dbut de chaque groupe) (pour ce dernier choix, on indiquera sur quel groupe la variable doit tre rinitialise dans lattribut Rinitialiser le groupe)
Incrmenter le type : indique quelle occasion la variable doit tre incrmenter. Les valeurs possibles sont les mmes que pour lattribut Rinitialiser le type.
Nous souhaitons maintenant afficher en pied de groupe de la liste demploys regroups par initiale, le nombre demploys pour chaque groupe. Plusieurs possibilits vont soffrir nous : Utiliser la variable intgre Initial_COUNT, associe notre groupe Initial : celle-ci est la meilleure rponse notre besoin. Utiliser la variable intgre COLUMN_COUNT : en effet, comme chacun de nos groupes est plac dans une colonne diffrente, cette variable rpondrait galement notre besoin Utiliser une variable dfini par lutilisateur : la cration dune variable utilisant les attributs offerts par JasperReports (un type de calcul Dcompte, avec une rinitialisation sur la groupe Initial) rpondrait encore notre besoin.
Page 46/73
Les variables du rapport sont lists dans la fentre Structure du document de iReport :
Page 47/73
Le modle de rapport est modifi pour afficher le total des employs de chaque groupe, en utilisant la variable Initial_COUNT :
Page 48/73
Nous avons vu que pour remplir un rapport, 3 lments sont ncessaires : Un modle de rapport Des paramtres Une datasource (ou une connexion JDBC)
Ces 3 lments devront donc tre indiqu llment sous rapport, via le rapport parent. Pour illustrer lutilisation dun sous rapport, nous allons reprendre le premier exemple, la liste des projets (cf 4). Nous allons ajouter cet exemple, pour chaque projet list, la liste des employs travaillant sur ce projet. Cette liste sera un sous rapport.
Ce rapport utilisera une datasource lui fournissant une collection demploys. Cette datasource sera cre lexcution par le rapport principal et passe au sous rapport. Nous crons un rapport utilisant les champs de la classe Employe, en affichant les enregistrements sur 3 colonnes, avec remplissage horizontal :
Page 49/73
Intgrons maintenant ce rapport dans notre rapport principal, par lintermdiaire dun lment sous rapport. IReport propose un assistant, accessible via licne .
Via lassistant, nous indiquons que nous utilisons en tant que sous rapport un rapport existant :
Page 50/73
Il faut ensuite indiquer quelle datasource (ou connexion) va utiliser le sous rapport. Les possibilits ici sont diverses : Le sous rapport pourra utiliser la mme datasource (ou connexion) que le rapport principal, que celui-ci pourra lui passer via les paramtres intgrs REPORT_DATA_SOURCE (ou REPORT_CONNECTION)
Le sous rapport pourra utiliser une autre datasource (ou connexion) que le rapport principal pourra lui passer via un paramtre utilisateur renseign lexcution du rapport principal.
Le sous rapport peut enfin utiliser une datasource cre lexcution partir dun paramtre ou dun champ du rapport principal. Cest la possibilit que nous allons choisir ici, en crant une instance de la classe JRBeanCollectionDataSource de JasperReports, prenant en paramtre la collection dinstance de la classe Employe porte par la classe Projet, que nous avons incluse dans les champs du rapport principal.
Page 51/73
Page 52/73
En double cliquant sur cet lment, on accde la fentre de paramtrage du sous rapport, que nous allons dtailler : Longlet Commun permet de rgler la mise page du sous rapport dans le rapport principal, en particulier de prciser une ventuelle condition daffichage, sous la forme dune expression
Page 53/73
Longlet Rapport secondaire permet de dfinir une Map de paramtres passer au sous rapport (peu utilis), ainsi que lexpression dfinissant la datasource (ou connexion) fournir au sous rapport
Longlet Rapport secondaire (autre) permet de dfinir laccs au rapport qui servira de sous rapport. Cet accs peut tre dclar de plusieurs manires : o Sous la forme dun String. Cest la manire la plus commune. Dans ce cas, JasperReports va dabord essayer de se servir de cette chane comme dune URL. Si cela choue, la String sera utiliser comme chemin daccs sur le systme de fichier local. Si cela choue encore, JasperReports essaiera de charger le modle de rapport depuis le CLASSPATH. Si tout ceci choue, une Exception est leve. Sous la forme dune instance de la classe JasperReport de JasperReports. Sous la forme dune instance de la classe java.io.File Sous la forme dune instance de la classe java.io.InputStream Sous la forme dune instance de la classe java.net.URL
o o o o
Pour ces 4 dernires formes, la faon la plus commune de passer ces instances est de passer par un paramtre du rapport. Enfin cet onglet permet de mapper les paramtres du sous rapport avec des lments (paramtre, variable, champ ou expression) du rapport principal ; ainsi que, inversement, de mapper des variables du rapport secondaire avec des variables du rapport principal pour fournir un moyen au rapport secondaire de retourner des valeurs au rapport principal.
Page 54/73
Page 55/73
Llment sous rapport a la forme suivante dans le code source du rapport principal :
<subreport isUsingCache="true"> <reportElement x="8" y="29" width="519" height="16" key="subreport-1"/> <dataSourceExpression> <![CDATA[new JRBeanCollectionDataSource($F{listeEmploye})]]> </dataSourceExpression> <subreportExpression class="java.lang.String"> <![CDATA[$P{SUBREPORT_DIR} + "PremierSousRapport.jasper"]]> </subreportExpression> </subreport>
Page 56/73
5.5 GRAPHIQUES
JasperReports propose la possibilit de reprsenter les donnes sous forme de graphique. Cette fonctionnalit se base sur lutilisation de la bibliothque Java JFreeChart. La gamme de diagramme proposs est large : Camenbert Barres Courbe
Chaque type de diagramme sappuiera sur un ensemble de donnes dfini par lutilisateur. Voyons ceci par lexemple en affichant sur le rapport prcdent un camembert reprsentant le nombre demploys par projet.
Dans iReport, lajout dun diagramme dans le rapport se fait par clic sur licne de diagramme rajouter :
Page 57/73
Laccs aux proprits du diagramme se fait en faisant apparatre le menu contextuel de llment (clic-droit sur llment) et en slectionnant Proprits du tableau :
Longlet Proprits du tableau contient une liste de paramtres contrlant lapparence du diagramme.
Page 58/73
Le sous onglet Ensemble de donnes rgle les paramtres de rinitialisation et dincrmentation de la valeur de lexpression du rapport.
Enfin, le sous onglet Dtails permet de dfinir lensemble de donnes sur lequel le diagramme va sappuyer. Cet onglet sera diffrent en fonction du type de diagramme choisi, afin de dfinir un ensemble de donnes en adquation avec le diagramme.
Page 59/73
Dans notre exemple, pour un diagramme de type camembert, lensemble de donnes du diagramme va tre dfinir par lintermdiaire de 3 lments : Lexpression de cl permet didentifier de manire unique chaque part du camembert. Lexpression de valeur spcifie la valeur numrique associer avec la cl Lexpression dtiquette spcifie le label associ chaque part du camembert
Notre exemple dsirant le nombre demploys par projet, les valeurs suivantes sont utilises : Cl : le nom, unique, du projet Valeur : la taille de la collection demploys du projet Etiquette : cette mme taille, mais convertit en chane de caractres
Page 60/73
La reprsentation de ce diagramme dans le code source du modle de rapport est la suivante : <pieChart> <chart hyperlinkTarget="Self" > <reportElement x="8" y="8" width="239" height="135" key="element-1"/> <box></box> <chartLegend textColor="#000000" backgroundColor="#FFFFFF" > </chartLegend> </chart> <pieDataset> <dataset></dataset> <keyExpression><![CDATA[$F{nomProjet}]]></keyExpression> <valueExpression> <![CDATA[$F{listeEmploye}.size()]]>
Page 61/73
</valueExpression> <labelExpression> <![CDATA[String.valueOf($F{listeEmploye}.size())]]> </labelExpression> <sectionHyperlink></sectionHyperlink> </pieDataset> <piePlot> <plot /> </piePlot> </pieChart>
5.6 SCRIPTLETS
JasperReports autorise lexcution de portions de code Java certains moments du remplissage dun rapport. Cest portions de code sont appels scriptlets.
Lcriture se ralise en entendant une des deux classes de JasperReports suivantes : JRAbstractScriplet : cette classe contient un certain nombre de mthodes abstraites qui devront tre surcharges dans la classe fille JRDefaultScriplet : cette classe utilitaire tend JRAbstractScriplet et fournit une implmentation par dfaut vide de chacune des mthodes de la classe mre. En hritant de cette classe, lutilisateur a seulement besoin de surcharger les mthodes dont il a besoin.
Les mthodes dfinies par la classe JRAbstractScriplet sont automatiquement appeles par JasperReports un moment prcis lors du remplissage du rapport. Ces mthodes, au nom rvlateur, sont les suivantes : void beforeReportInit() void afterReportInit() void beforePageInit() void afterPageInit() void beforeColumnInit() void afterColumnInit() void beforeGroupeInit() void afterGroupeInit() void beforeDetailEval() void afterDetailEval()
La classe de scriptlets de lutilisateur peut tre crite et compiler via un outil externe comme Eclipse et le chemin vers cette classe prcis dans les options du document :
Page 62/73
iReport propose galement un diteur de scriptlets. En utilisant ce mode, la classe Java de scriptlets est gr en interne par iReport.
Lditeur de scriptlets de iReport est accessible par le menu Modifier > Editeur de scriptlets.
Les scriptlets ont accs aux variables, champs et paramtres du rapport, par lintermdiaire des mthodes suivantes :
Page 63/73
valeur) pour
getFieldValue(nomChamp) et setFieldValue(nomChamp, valeur) pour rcuprer et modifier la valeur dun champ getParameterValue(nomParametre) et setParameterValue(nomParametre, valeur) pour rcuprer et modifier la valeur dun paramtre
Notons enfin que la classe de scriptlets de lutilisateur pourra contenir dautres mthodes que celles dfinies par la classe JRAbstractScriplet, et que ces mthodes pourront tre appeles par lintermdiaire du paramtre intgr REPORT_SCRIPTLET. Par exemple si la classe contient une mthode toto(), elle pourra tre appele par la syntaxe : $P{REPORT_SCRIPTLET}.toto()
Illustrons lutilisation de scriptlets en affichant sur notre rapport le temps dexcution entre linitialisation du rapport et la fin de lvaluation des donnes. Nous modifions le rapport pour afficher une variable nomme evalTime qui aura t pralablement cre :
Via lditeur de scriptlets de iReport, nous renseignons les lments suivants : Deux variables pour la date de dbut et la date de fin
Page 64/73
Linitialisation de la date de fin, puis linscription de la dure dans la variable evalTime, aprs lvaluation des donnes :
Page 65/73
Dans le code source du modle de rapport, lemploi dune classe de scriptlets se dfini de la manire suivante : <jasperReport name="PremierRapport" columnCount="1" printOrder="Vertical" orientation="Portrait" pageWidth="595" pageHeight="842" columnWidth="535" columnSpacing="0" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20" whenNoDataType="AllSectionsNoDetail" scriptletClass="PremierRapportScriptlet" isTitleNewPage="false" isSummaryNewPage="false">
5.7 VIRTUALISATION
Lors de la gnration de trs grand rapport, manipulant de grandes quantits de donnes, il peut arriver que la quantit de mmoire ncessaire la gnration de ce rapport soit suprieure la quantit de mmoire alloue la JVM, provoquant une OutOfMemoryException.
Pour rsoudre ce problme, JasperReports propose un mcanisme de virtualisation de la mmoire : lors de lexcution du rapport, des segments de donnes sont stocks sur le disque afin de librer de la mmoire.
Lutilisation de cette fonctionnalit se fait par lintermdiaire du paramtre intgr REPORT_VIRTUALIZER. Celui-ci devra tre renseign avec une instance dune classe implmentant linterface JRVirtualizer de JasperReports. JasperReports propose plusieurs implmentations de cette interface : JRFileVirtualizer : virtualisation des donnes dans des fichiers JRSwapFileVirtualizer : virtualisation des donnes dans un seul gros fichier JRGzipVirtualizer : les donnes non utilises sont zippes, mais gardes en mmoire
Voici un exemple dutilisation de JRFileVirtualizer dans le code Java : // 2 arguments : le nombre de page maximum en mmoire, le rpertoire // utilis pour stock les segments de donnes JRFileVirtualizer fileVirtualizer = new JRFileVirtualizer(3, "cache"); HashMap parameters = new HashMap(); parameters.put(JRParameter.REPORT_VIRTUALIZER, fileVirtualizer);
Page 66/73
En cas de besoin spcifique (si lon souhaite stocker les segments de donnes dans une base de donnes par exemple), il est possible de raliser une implmentation personnalise de linterface JRVirtualizer.
Dans iReport, pour utiliser la virtualisation, il faut slectionner loption Utiliser le virtualiseur de rapport dans le menu Crer. Le virtualiseur utilis est configurable dans les paramtres du programme, dans longlet Compiler.
Page 67/73
Lexportation se ralise par lintermdiaire de classes tendant linterface JRExporter de JasperReports. Les deux mthodes principales de cette interface sont : void setParameter (JRExporterParameter parameter, Object value) : pour renseigner les paramtres ncessaires lexportation void exportReport() : pour lancer lexportation du rapport
Dans la plupart des cas, deux paramtres doivent tre renseigns : linstance dobjet de classe JasperPrint, reprsentant le rapport rempli au format natif le flux ou fichier de sortie utilis pour lexport
La classe JRExporterParameter contient un certain nombre de constantes reprsentant les paramtres pouvant tre passs lexportateur, dont les paramtres ci-dessus via les constantes : JRExporterParameter.JASPER_PRINT pour linstance dobjet de classe JasperPrint JRExporterParameter.OUTPUT_FILE_NAME pour le nom du fichier de sortie JRExporterParameter.OUPUT_STREAM pour le flux de sortie
Page 68/73
Lexportation dun rapport suit toujours la mme logique. Voici quelques exemples dexportation : HashMap<String, Object> params = new HashMap<String, Object>(); // ... // Renseignment des paramtres // ... //Remplissage du rapport JasperPrint jasperPrint = JasperFillManager.fillReport( "rapport.jasper", params, new JREmptyDataSource()); // export en pdf JRPdfExporter pdfExporter = new JRPdfExporter(); pdfExporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint); pdfExporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE, new File("rapport.pdf")); pdfExporter.exportReport();
Gnration en PDF
HashMap<String, Object> params = new HashMap<String, Object>(); // ... // Renseignment des paramtres // ... //Remplissage du rapport JasperPrint jasperPrint = JasperFillManager.fillReport( "rapport.jasper", params, new JREmptyDataSource()); // export en xls JRXlsExporter excelExporter = new JRXlsExporter(); excelExporter.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint); excelExporter.setParameter(JRPdfExporterParameter.OUTPUT_FILE, new File("rapport.xls")); excelExporter.exportReport();
Gnration en XLS
Dans iReport, le Menu Crer propose la gnration dans les formats supports par JasperReports :
Page 69/73
Page 70/73
Gnration en PDF
Page 71/73
Gnration en XLS
Page 72/73
Page 73/73