V. UTILISATION DE JASPER REPORT▲
V-A. Génération du document PDF avec Jasper Report et enregistrement▲
Pour la génération de la fiche du produit au format PDF, cela est fait avec le standard Jasper Report avec son outil iReport. Avant de présenter l'utilisation de l'API Jasper dans le projet pour la génération du PDF, nous allons d'abord brièvement faire un rappel de l'utilisation de iReport pour la construction du template.
V-A-1. Création du template jasper de la fiche du produit▲
Dans l'interface d'iReport nous créons un nouveau rapport vierge et nous déplions les zones : title, detail et pageFooter.
Dans la zone title représentant le titre et le logo du document qui sera produit, nous allons placer un composant image et des zones de textes statiques.
Lors de la génération du rapport, le moteur doit prendre en entrée un objet de type InputStream contenant les binaires de l'image. Les Stream de l'image seront passés au le moteur Jasper Report à travers le paramètre : PRODUCT_REPORT_KOOSSERY_LOGO de type java.io.InputStream. Les valeurs des zones de textes statiques sont directement saisies (voir la figure ci-dessous).
Dans la zone detail nous allons placer un composant image pour le positionnement de l'image du produit et des zones d'entrée de textes pour les informations du produit.
Il a aussi cinq zones de textes statiques affichant les labels du nom du produit, la description du produit, la référence du produit, le prix unitaire et le stock. Les valeurs sont passées au travers des paramètres :
- PRODUCT_REPORT_NAME de type java.lang.String ;
- PRODUCT_REPORT_PRIZE de type java.lang.Float ;
- PRODUCT_REPORT_REFERENCE de type java.lang.String ;
- PRODUCT_REPORT_STOCK de type java.lang.Integer ;
- PRODUCT_REPORT_DESCRIPTION de type java.lang.String.
- Les Stream de l'image sont passés à partir du paramètre PRODUCT_REPORT_IMAGE de type java.io.InputStream.
Dans la zone pageFooter nous allons placer des zones de textes statiques.
Pour avoir des notions approfondies sur la création des rapports avec Jasper Report, le Centre de Compétences AlfrescojBPM de Koossery TechnologyKoossery Technology conseille les nombreuses documentations du site developpez.comdeveloppez.com, dans la rubrique 'Java'. Quelques exemples de tutoriels :
1 |
Génération de rapport avec Jasper Reporthttp://ericreboisson.developpez.com/tutoriel/java/jasper-report/pdf/ par Eric Reboisson (Site Web) |
2 |
Initiation à JasperReports - iReporthttp://jpg.developpez.com/bi/tutoriels/jasperreports/initiation/ par Jean-Philippe Guilloux (Site Web) |
V-A-2. Compilation du template jasper report▲
La compilation du template se fait dans l'outil iReport à partir du menu Créer -> Compiler. Nous avons compilé et produit le fichier Product.jasper.
V-A-3. Utilisation du template dans le projet et génération du PDF▲
L'utilisation du template Product.jasper dans le projet pour la génération du PDF de la fiche produit se fait dans la méthode String finishImpl(FacesContext arg0, String arg1) du backing bean. Nous allons présenter dans les détails.
Tout d'abord les labels des paramètres déclarés dans le template, les noms doivent être identiques aux noms des paramètres déclarés dans le template :
/* --------------- Report Parameters --------------- */
private
final
String PRODUCT_REPORT_DESCRIPTION =
"PRODUCT_REPORT_DESCRIPTION"
;
private
final
String PRODUCT_REPORT_IMAGE =
"PRODUCT_REPORT_IMAGE"
;
private
final
String PRODUCT_REPORT_KOOSSERY_LOGO =
"PRODUCT_REPORT_KOOSSERY_LOGO"
;
private
final
String PRODUCT_REPORT_NAME =
"PRODUCT_REPORT_NAME"
;
private
final
String PRODUCT_REPORT_PRIZE =
"PRODUCT_REPORT_PRIZE"
;
private
final
String PRODUCT_REPORT_REFERENCE =
"PRODUCT_REPORT_REFERENCE"
;
private
final
String PRODUCT_REPORT_STOCK =
"PRODUCT_REPORT_STOCK"
;
Puis les images et le fichier jasper du template :
/* --------------- JASPER REPORT FILE AND RESSOURCES --------------- */
private
ClassPathResource JASPER_REPORT_CONTEXT_PATH=
new
ClassPathResource
(
"/jasperreport/Product.jasper"
);
private
ClassPathResource JASPER_REPORT_KOOSSERY_LOGO_PATH=
new
ClassPathResource
(
"/images/logo/logo_koossery.jpg"
);
En dernier le chargement des données dans le template et la production du PDF :
// - Parameters to send to the report
Map parameters =
new
HashMap
(
);
/* Product Report */
parameters.put
(
PRODUCT_REPORT_DESCRIPTION, this
.productData.getDescription
(
));
parameters.put
(
PRODUCT_REPORT_IMAGE, this
.productData.getPhotoInputStream
(
));
parameters.put
(
PRODUCT_REPORT_KOOSSERY_LOGO,
new
FileInputStream
(
JASPER_REPORT_KOOSSERY_LOGO_PATH.getFile
(
)));
parameters.put
(
PRODUCT_REPORT_NAME, this
.productData.getName
(
));
parameters.put
(
PRODUCT_REPORT_PRIZE, this
.productData.getPrize
(
));
parameters.put
(
PRODUCT_REPORT_REFERENCE, this
.productData.getRef
(
));
parameters.put
(
PRODUCT_REPORT_STOCK, this
.productData.getStock
(
));
File file =
JASPER_REPORT_CONTEXT_PATH.getFile
(
);
// - Execution
JasperPrint jasperPrint =
JasperFillManager.fillReport
(
new
FileInputStream
(
file),
parameters,new
JREmptyDataSource
(
));
// - Create report as PDF FIle
this
.reportBytes =
JasperExportManager.exportReportToPdf
(
jasperPrint);