Académique Documents
Professionnel Documents
Culture Documents
Guide dutilisation
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Rdaction
0.1
JP.Wilsch
Description
Vrification
Cration
Date
15/09/08
LISTE DE DIFFUSION
Organisation Nom
Info
Commentaire
Validation
Page 2/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
SOMMAIRE
1
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2
2.1
3
3.1
3.2
3.3
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
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
1 PRESENTATION DE JASPERREPORTS
Possibilit de fournir les donnes sous diffrentes formes (paramtres, sources de donnes)
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
les courbes
Ds lments graphiques de bases peuvent galement trs facilement tre ajouts aux rapports (image, ligne,
rectangle, ellipse, ) pour lagrmenter.
Page 5/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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 :
Il est galement ais, en cas de besoin spcifique, de raliser sa propre datasource, en implmentant linterface
commune toutes ces classes.
Possibilit de rutilisation dans plusieurs rapports diffrents dun mme sous rapport prsentant un
affichage frquent (cet affichage na donc besoin de ntre dvelopp quune fois)
1.6 EXPORT
JasperReports propose lexport de ces rapports dans de nombreux formats :
XLS (Excel)
RTF
ODF
HTML
Page 6/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
XML
CSV
Texte brut
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 :
Compilation JRXML en
modle Jasper
Renseignement du modl
Jasper avec les donnes
Page 7/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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.
Gestion de linternationalisation
Scriptlets (portions de code Java pouvant tre excut lors du renseignement du rapport)
Tableaux croiss
Page 8/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
IReport nest pas le seul outil ddition existant pour JasperReport. On peut citer les logiciels suivants :
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 11/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Ce modle est un fichier XML, dont voici le code source juste aprs son initialisation par iReport :
<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"
isSplitAllowed="true" >
</band>
</detail>
<columnFooter>
Page 12/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
<band height="30"
</band>
</columnFooter>
<pageFooter>
<band height="50"
</band>
</pageFooter>
<lastPageFooter>
<band height="50"
</band>
</lastPageFooter>
<summary>
<band height="50"
</band>
</summary>
isSplitAllowed="true" >
isSplitAllowed="true" >
isSplitAllowed="true" >
isSplitAllowed="true" >
</jasperReport>
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
detail : pour dfinir le dtail du contenu du rapport, le contenu de cet lment est rpt pour
chaque enregistrement de la datasource du rapport
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 14/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
staticText : pour dfinir un texte statique, qui ne dpend ainsi daucune datasource, variable,
paramtre ou expression
Excuter (avec une source de donnes vide ou non) : pour visualiser notre rapport, avec le choix du
type de datasource que lon lui passe (nous reviendrons sur les datasources dans le chapitre suivant)
Choix du type dexportation : pour choisir, parmi les types dexportation offerts par JasperReports, celui
avec lequel on souhaite prvisualiser le rapport : PDF, HTML, Excel, CSV ou le visualiseur intgr
JasperReports, JRViewer.
Page 15/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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 :
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
</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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
<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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
$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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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.
Page 29/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
*/
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;
}
}
type
Collection,
pour
une
datasource
de
type
Page 30/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 31/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 33/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 34/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
<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>
Soit en passant la requte au rapport lors du remplissage de celui-ci. Cette solution permettra, dans le
cadre de la gnration dun rapport par une application Java, de faire passer la requte au rapport par
le code java
Soit en inscrivant la requte dans le rapport, la manire de linscription de la requte SQL dans le
chapitre 4.1.2
Page 35/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Dans le code source du rapport, la dfinition du nombre de colonnes se fait dans la tag principal du document :
<jasperReport
name="PremierRapport"
columnCount="3"
printOrder="Vertical"
orientation="Portrait"
pageWidth="595"
pageHeight="842"
columnWidth="178"
columnSpacing="0"
Page 40/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
leftMargin="30"
rightMargin="30"
topMargin="20"
bottomMargin="20"
whenNoDataType="BlankPage"
isTitleNewPage="false"
isSummaryNewPage="false">
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
<group
class="java.lang.String">
Page 43/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
<![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
Page 44/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Type de calcul : indique que type de calcul va tre fait sur la variable lors du remplissage du rapport.
Les valeurs possibles sont :
o
Dcompte
Dcompte distinct
Somme
Moyenne
Plus basse
Plus lev
Ecart standard
Ecart
Systme (calcul dfini par lutilisateur, par exemple via une scriptlet)
Page 45/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Rinitialiser le type : indique quelle occasion la variable doit tre rinitialiser. Les valeurs possibles
sont :
o
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Les variables du rapport sont lists dans la fentre Structure du document de iReport :
Page 47/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Le modle de rapport est modifi pour afficher le total des employs de chaque groupe, en utilisant la variable
Initial_COUNT :
Page 48/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Un modle de rapport
Des paramtres
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 52/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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.
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 55/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Dans notre exemple, pour un diagramme de type camembert, lensemble de donnes du diagramme va tre
dfinir par lintermdiaire de 3 lments :
Notre exemple dsirant le nombre demploys par projet, les valeurs suivantes sont utilises :
Page 60/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
</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.
JRAbstractScriplet : cette classe contient un certain nombre de mthodes abstraites qui devront
tre surcharges dans la classe fille
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
getVariableValue(nomVariable) et setVariableValue(nomVariable,
rcuprer et modifier la valeur dune variable
valeur) pour
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 :
Page 64/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Linitialisation de la date de fin, puis linscription de la dure dans la variable evalTime, aprs
lvaluation des donnes :
Page 65/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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.
JRGzipVirtualizer : les donnes non utilises sont zippes, mais gardes en mmoire
Page 66/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
XLS (Excel)
RTF
ODF
HTML
XML
CSV
Texte brut
Lexportation se ralise par lintermdiaire de classes tendant linterface JRExporter de JasperReports. Les
deux mthodes principales de cette interface sont :
Page 68/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
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
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 70/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Gnration en PDF
Page 71/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Gnration en XLS
Page 72/73
Guide dutilisation
JasperReports & iReport
Communaut Adullact Projet ACube
Page 73/73