Générer un rapport dans Jasperreport n’est pas simple. Jasperreport compilant de façon séquentielle, il n’est pas facile de stocker les numéros des pages générées pour ensuite les afficher sur la première page du rapport.
Une des solutions possibles consiste à stocker dans une variable les numéros de page, et d’afficher cette variable où on le souhaite dans le rapport, en paramétrant le temps d’évuation à « Rapport ».
Pour réaliser cela, il faut mixer scriptlet et affichage HTMLHTML (HyperText Markup Language) est un langage permettant de décrire le découpage d'une page web. : on va générer le sommaire sous forme de tableau HTML qui sera interprété par le composant HTML de Jasperreport, en paramétrant le temps d’évaluation à « Rapport ». Ainsi le sommaire ne sera généré qu’une fois toutes les pages du rapport générés.
Voici les étapes pour réaliser ce sommaire :
(disponible ici : http://community.jaspersoft.com/project/jasperreports-library/releases) .
Pour importer un jar : Copier coller le jar dans votre projet JavaLangage de développement très populaire ! => Clic droit sur le projet => Propriétés => Option « Java Build Path » => Importer Jar : choisir le Jar à importer
Dans notre exemple il s’agira d’un objet « Index », composé d’un titre, d’un numéro de page et d’un type:
package axopen.jasper.generer.sommaire;
public class Index {
private String nomIndex = null;
private Integer numPageIndex = null;
private String typeIndex = null;
public Index(
String nomIndex,
Integer numPageIndex,
String typeIndex
)
{
this.nomIndex = nomIndex;
this.numPageIndex = numPageIndex;
this.typeIndex = typeIndex;
}
public String getNomIndex()
{
return this.nomIndex;
}
public Integer getNumPageIndex()
{
return this.numPageIndex;
}
public String getTypeIndex()
{
return this.typeIndex;
}
}
Remarque :
package axopen.jasper.generer.sommaire;
import java.util.ArrayList;
import java.util.Collection;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
public class GenererSommaire extends JRDefaultScriptlet{
public String addTocEntry(String pSectionName, Integer pPageNumber,
String pTypeSection)
throws JRScriptletException{
ArrayList toc = (ArrayList)this.getVariableValue("SOMMAIRE");
String lSectionName = pSectionName;
Integer lPageNumber = pPageNumber;
String lTypeSection = pTypeSection;
try{
toc.add(new axopen.jasper.generer.sommaire
.Index(lSectionName, lPageNumber, lTypeSection));
}catch (Exception e){
System.out.println(e);
}
return "";
}
public String generateHTMLSommaire(ArrayList pListIndex){
String lSommaireHTML = new String();
String lBgColor = new String();
String lCurrentNomIndex = new String();
String lSautDeLigne = new String();
String lMargeGauche = new String();
String lNouvelleColonne = new String();
lBgColor = "#FFFFFF";
lSautDeLigne = " ";
lNouvelleColonne = "";
lSommaireHTML = ""
for (int i = 0; i < pListIndex.size(); i++)
{ if(i<2){ lBgColor = "#FFFFFF"; }
if( pListIndex.get(i).getTypeIndex().equals("titre") ){
lCurrentNomIndex = pListIndex.get(i)
.getNomIndex().toUpperCase();
lMargeGauche = "" ;
} else
{
lCurrentNomIndex = pListIndex.get(i)
.getNomIndex().toLowerCase();
lMargeGauche = "" ;
}
lSommaireHTML += " ";
lSommaireHTML += " ";
lSommaireHTML += " ";
lSommaireHTML += " ";
if(i==1) {
lSommaireHTML += lSautDeLigne;
} else if(i==24 || i==50) {
lSommaireHTML += lNouvelleColonne;
} else if(i>75) {
break;
}
lBgColor = (lBgColor.equals("#FFFFFF")) ?
"#CCCCCC" : "#FFFFFF"; }
lSommaireHTML += lMargeGauche
+ lCurrentNomIndex + pListIndex.get(i)
.getNumPageIndex() ;
lSommaireHTML.replace(« null », « »);
return lSommaireHTML;
} }
Puis copier le jar dans le projet Jasper et l’importer dans le java build path. Enfin paraméter le rapport Jasper pour qu’il utilise ce scriptlet (=ce jar), via la propriété « Scriplet Class » (=[Nom du package].[Nom du Jar]. Dans notre exemple : axopen.jasper.generer.sommaire.GenererSommaire).
(Ici : SOMMAIRE) de type java.util.ArrayList. Attention cette variable doit avoir le même nom que celle appelée dans le script (via la commande : (ArrayList)this.getVariableValue(NomVariable).
Paramétrez la ainsi :
Paramétrer cet élément ainsi :
Remarque : il n’est pas possible de placer le sommaire dans un sous-rapport, ceux-ci n’ayant pas l’attribut Temps d’Evaluation.
Paramétrez le ainsi :
Nom de la méthode pour ajouter une entrée(« Texte libre »,$V{PAGE_NUMBER}, »type (texte libre »). Dans notre exemple : $P{REPORT_SCRIPTLET}.addTocEntry(« Présentation des fournisseurs »,$V{PAGE_NUMBER}, »titre »)
=> En savoir plus sur les solutions BI
Dans cet article nous allons voir comment réaliser une comparaison des pixels de deux BufferedImage en multithread pour accélérer la performance.
La classe Calendar de Java s’avère bien utilie pour pouvoir manipuler des dates.
Tuto pour déployer des conteneurs grâce à la technologie Docker