I. Introduction▲
Les applications d'entreprises nécessitent souvent des éditions écran,mais aussi papier, provenant de sources diverses (bases de données, fichiers XML, etc.).
Les solutions d'implémentation sont diverses :
- Framework d'entreprise propriétaire ;
- outils payants (Actuate, Business Objects, etc.).
Cependant des outils issus du libre existent et sont très puissants en termes de fonctionnalités :
Nous étudierons dans ce tutoriel l'utilisation de la bibliothèque Jasper Report au travers de la construction d'un rapport simple via un GUI nommé iReport et de sa génération au format PDF avec du code JAVA.
La source de données choisie est le SGBD MySQL.
II. Création de la base de données▲
La source de données choisie pour cet article est MySQL. (J'ai utilisé la version mysql-5.0.20a disponible sur http://www.mysql.com.) Il est évidemment possible d'en choisir une autre comme Oracle, pourvu que vous disposiez des drivers JDBC adaptés pour la suite.
Nous supposons que MySQL est installé et que vous disposez des droits nécessaires pour la création des objets du tutoriel (base, tables)
II-A. Création de la base▲
Vous devez vous connecter à votre serveur MySQL et exécuter le script de création de base suivant :
CREATE
DATABASE
`jasper_database`
;
II-B. Création de la table▲
Exécuter le script suivant pour créer la table dans la base jasper_database :
CREATE
TABLE
`jasper_database`
.`EMPLOYEE`
(
`NOM`
VARCHAR
(
50
)
NOT
NULL
,
`PRENOM`
VARCHAR
(
50
)
NOT
NULL
,
`AGE`
NUMERIC
NOT
NULL
,
`VILLE`
VARCHAR
(
50
)
NOT
NULL
,
PRIMARY
KEY
(
`NOM`
)
)
;
Exécuter le script suivant pour peupler la table employee :
insert
into
employee (
NOM,PRENOM,AGE,VILLE)
values
(
'DUPONT'
,'Paul'
,25
,'PARIS'
)
;
insert
into
employee (
NOM,PRENOM,AGE,VILLE)
values
(
'MARTIN'
,'Fred'
,34
,'PARIS'
)
;
insert
into
employee (
NOM,PRENOM,AGE,VILLE)
values
(
'WAGNER'
,'Anne'
,45
,'PARIS'
)
;
insert
into
employee (
NOM,PRENOM,AGE,VILLE)
values
(
'POLUX'
,'Elea'
,64
,'TOULOUSE'
)
;
III. Installation de iReport▲
Télécharger iReport sur le site http://ireport.sourceforge.net (Version 1.2.1 à ce jour).
L'installation de iReport est triviale puisqu'il suffit d'extraire l'archive téléchargée (ici sur D :) et d'exécuter l'application en lançant D:\iReport-1.2.1\bin\startup.bat.
IV. Utilisation de iReport▲
Nous allons maintenant construire un rapport simple sur la table précédemment créée en utilisant l'assistant fourni dans iReport.
Ouvrir iReport en exécutant D:\iReport-1.2.1\bin\startup.bat
IV-A. Création d'une connexion▲
Ouvrir le menu Data > Datasource > Connections / Datasources
Cliquer sur New et paramétrer la connexion à la base de données comme suit :
Cliquer sur le bouton Test pour vérifier la connexion.
Une fois la connexion valide, cliquer sur le bouton Save, la connexion est maintenant créée.
Vous pouvez fermer alors la fenêtre suivante :
IV-B. Création du rapport▲
Dans le menu, ouvrir Fichier > Report Wizard et saisir la requête SQL suivante après avoir sélectionné la connexion précédemment créée :
select
*
from
employee
Cliquer Next et sélectionner tous les champs en cliquant >>
Cliquer Next
Cliquer Next (dans ce rapport simple, nous ne ferons pas de groupement)
Laisser ces valeurs par défaut et cliquer Next
Cliquer Finish, le rapport apparaît alors dans le designer
IV-C. Compilation du rapport▲
Nous allons maintenant générer sous la forme d'un fichier XML dont l'extension est en fait jrxml (le format utilisé par la bibliothèque Jasper Report).
Dans le menu, ouvrir Build > Compiler
Nous allons là encore laisser par défaut la sauvegarde du fichier classic.jrxml dans le répertoire D:\iReport-1.2.1.
Cliquer sur Enregistrer, la compilation se lance et une fois terminée, vous devriez avoir dans le volet inférieur :
Compiling to file... .\classic.jasper -> D:\iReport-1.2.1\classic.java
it.businesslogic.ireport.ReportClassLoader@120cb10
Compilation running time : 25
V. Génération du rapport PDF via JAVA▲
Nous allons maintenant créer un projet sous Eclipse et une classe Java qui s'occupera de compiler le fichier classic.jrxml pour en générer un rapport PDF.
Téléchargez et installer J2SE 1.5 SDK.
Si vous ne disposez pas d'Eclipse, téléchargez-le et installez-le. Dans ce tutoriel j'ai utilisé la version 3.1.2 d'Eclipse.
Si ces deux premiers points vous posent problème, consultez la page suivante : http://www.eclipsetotale.com/articles/installation.html
V-A. Création du projet ECLIPSE▲
Nous devons créer et configurer un projet Eclipse. Cette partie est essentielle au bon fonctionnement de la suite.
Ouvrir Fichier > New > Project.
Choisissez Java Project puis donnez au projet les caractéristiques suivantes et cliquez sur Finish :
- Veillez à bien cocher « Create separate source and output folders ».
- Si Eclipse vous demande de passer en Java Perspective, répondez « Yes ».
- Créez à partir de l'explorateur windows un répertoire « lib » dans la racine de votre projet : /eclipse/workspace/jasperTest/lib.
Copiez ensuite les fichiers jar suivants se trouvant dans le répertoire « lib » de l'application iReport (pour moi dans D:\iReport-1.2.1\lib) dans le répertoire « lib » du projet « JasperTest ».
- commons-beanutils-1.5.jar
- commons-collections-2.1.jar
- commons-digester-1.7.jar
- commons-logging-1.0.2.jar
- commons-logging-api-1.0.2.jar
- itext-1.3.1.jar
- jasperreports-1.2.1.jar
- mysql-connector-java-3.1.11-bin.jar
À ce jour la version du framework jasperreports et iReport est en 1.2.5, si vous utilisez cette version :
- jasperreports-1.2.5.jar est à copier au lieu de jasperreports-1.2.1.jar ;
- il faut également copier les jars suivants : commons-javaflow-20060411.jar et jdt-compiler-3.1.1.jar.
Revenez à Eclipse et faites sur le nom du projet « jasperTest » : « Bouton droit > Refresh ». Le répertoire « lib » a dû apparaître.
Nous allons maintenant ajouter au classpath du projet les bibliothèques :
- Faites sur le projet « jasperTest » : « Bouton Droit > Properties » ;
- Cliquez sur « Java Build Path » puis sur l'onglet « Libraries » ;
- Cliquez sur « Add jars ». Une fenêtre apparaît. Déroulez l'arborescence qui doit être « jasperTest > lib » et sélectionnez tous les jar présents. Puis cliquez sur « OK ».
Création de la classe JAVA : faites sur le nom du projet « jasperTest » : « Bouton droit > New > Class » puis donnez à la classe les caractéristiques suivantes :
Ouvrez ensuite la classe GeneratePDF.java et remplacez le code par le suivant.
Note : vous devrez peut-être remplacer les variables login et le password.
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.SQLException;
import
java.util.HashMap;
import
java.util.Map;
import
net.sf.jasperreports.engine.JRException;
import
net.sf.jasperreports.engine.JasperCompileManager;
import
net.sf.jasperreports.engine.JasperExportManager;
import
net.sf.jasperreports.engine.JasperFillManager;
import
net.sf.jasperreports.engine.JasperPrint;
import
net.sf.jasperreports.engine.JasperReport;
import
net.sf.jasperreports.engine.design.JasperDesign;
import
net.sf.jasperreports.engine.xml.JRXmlLoader;
import
com.mysql.jdbc.Driver;
public
class
GeneratePDF {
public
static
void
main
(
String[] args) {
// - Paramètres de connexion à la base de données
String url =
"jdbc:mysql://localhost/jasper_database"
;
String login =
"root"
;
String password =
"root"
;
Connection connection =
null
;
try
{
// - Connexion à la base
Driver monDriver =
new
com.mysql.jdbc.Driver
(
);
DriverManager.registerDriver
(
monDriver);
connection =
DriverManager.getConnection
(
url, login, password);
// - Chargement et compilation du rapport
JasperDesign jasperDesign =
JRXmlLoader.load
(
"D:
\\
iReport-1.2.1
\\
classic.jrxml"
);
JasperReport jasperReport =
JasperCompileManager.compileReport
(
jasperDesign);
// - Paramètres à envoyer au rapport
Map parameters =
new
HashMap
(
);
parameters.put
(
"Titre"
, "Titre"
);
// - Exécution du rapport
JasperPrint jasperPrint =
JasperFillManager.fillReport
(
jasperReport, parameters, connection);
// - Création du rapport au format PDF
JasperExportManager.exportReportToPdfFile
(
jasperPrint, "D:
\\
iReport-1.2.1
\\
classic.pdf"
);
}
catch
(
JRException e) {
e.printStackTrace
(
);
}
catch
(
SQLException e) {
e.printStackTrace
(
);
}
finally
{
try
{
connection.close
(
);
}
catch
(
SQLException e) {
e.printStackTrace
(
);
}
}
}
}
Cliquez ensuite avec le bouton droit sur la classe GeneratePDF.java et dans le menu contextuel cliquez sur Run as > Java Application afin d'exécuter la classe.
Un fichier classic.pdf a été généré dans le répertoire D:\iReport-1.2.1 , voilà le résultat :
VI. Conclusion▲
Premièrement, un remerciement à Ricky81 pour sa relecture et ses précieux conseils, ainsi qu'aux lecteurs de cet article qui m'ont remonté leurs remarques.
Cet article vous a essentiellement montré comment démarrer avec la bibliothèque Jasper Report.
Bien souvent les besoins d'entreprises ne se limitent pas à des générations simples de rapport, et les besoins plus complexes demanderont de connaître l'API JaspertReport plus en détail.
Quelques liens pour aller plus loin