FAQ Jasper/iReportConsultez toutes les FAQ

Nombre d'auteurs : 23, nombre de questions : 65, dernière mise à jour : 4 août 2014  Ajouter une question

 

Cette faq a été réalisée à partir des questions fréquemment posées sur les forums de www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette faq ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette faq ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci .
Sur ce, nous vous souhaitons une bonne lecture.
L'équipe Business Inteligence.


SommaireConcepts de JasperReports/iReportMise en page (20)
précédent sommaire suivant
 

Il suffit d'utiliser la variable interne Report_count.

Mis à jour le 12 mai 2009

Créer une variable de type java.text.SimpleDate.

Code xml : Sélectionner tout
1
2
3
4
<variable name="outFormatDate" class="java.text.SimpleDateFormat" resetType="Report" calculation="Nothing"> 
    <variableExpression><![CDATA[new java.text.SimpleDateFormat("MMMMM yyyy")]]></variableExpression> 
    <initialValueExpression><![CDATA[new java.text.SimpleDateFormat("MMMMM yyyy")]]></initialValueExpression> 
</variable>
Utiliser la variable dans l'expression du textfield pour formater la date courante new java.util.Date() :

Code xml : Sélectionner tout
1
2
3
<textFieldExpression   class="java.lang.String">  
    <![CDATA["Facturation mois " + $V{outFormatDate}.format(new java.util.Date()) ]]> 
</textFieldExpression>
Dans le cas d'une date issue d'une source de données $F{date}, il suffit de créer une variable identique pour effectuer le parsing (transformation en objet java.util.Date) :

Code xml : Sélectionner tout
1
2
3
4
<variable name="inFormatDate" class="java.text.SimpleDateFormat" resetType="Report" calculation="Nothing"> 
    <variableExpression><![CDATA[new java.text.SimpleDateFormat("dd/MM/yyyy")]]> </variableExpression> 
    <initialValueExpression> <![CDATA[new java.text.SimpleDateFormat("dd/MM/yyyy")]]> </initialValueExpression> 
</variable>
L'utilisation se fait de la même manière dans le textfield :

Code xml : Sélectionner tout
1
2
3
<textFieldExpression   class="java.lang.String">  
    <![CDATA[$V{outFormatDate}.format($V{inFormatDate}.parse($F{date}))]]>  
</textFieldExpression>

Mis à jour le 12 mai 2009 edno

L'export sera au format Odt (Open Office).

Code java : Sélectionner tout
1
2
3
4
5
// Export au format Odt (Open Office) 
JROdtExporter exporter = new JROdtExporter(); 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream); 
exporter .exportReport();

Mis à jour le 12 mai 2009 JauB

Cliquer droit sur la bande en question (détail, sommaire...), choisir Propriétés de bande et après mettre la valeur zéro dans la zone Hauteur de bande.

Mis à jour le 12 mai 2009 JauB

Pour personnaliser une case en fonction du contenu, une des méthodes possibles, et qui a ma préférence, est d'utiliser les styles conditionnels.

Un style est un ensemble de propriétés caractérisant des classes d'objets utilisées à l'intérieur d'un rapport. Un style conditionnel est un sous-ensemble d'un style conditionné par la valeur d'une expression logique : le style est appliqué si l'expression logique est "vraie". Prenons pour exemple le cas d'un TextField affichant le Field F1 dont on veut positionner la couleur de fond en fonction du contenu de F1 : Vert si le champ est positif ou nul et rouge sinon. On suppose que l'on utilise iReport NB.

On va donc commencer par définir un nouveau style "ST1" dans le rapport en allant tout en haut dans le Report Inspector et en cliquant droit sur Styles et choisissant Ajouter puis Style. On va dans Propriétés, on modifie le nom en mettant "ST1" et on positionne éventuellement des éléments de styles à appliquer à la case quel que soit le contenu.

Toujours dans le Report Inspector On clique droit sur le style ST1 et on fait Ajouter Conditional Style. On va dans Propriétés de ce nouveau style, on définit une condition :

Code java : Sélectionner tout
new Boolean( ${F1}>=0)
Et on positionne la propriété Backcolor à une valeur de Vert grâce à la palette de couleur. On positionne éventuellement d'autres propriétés associées au fond vert.

On réitère le step précédent mais en définissant une condition :

Code java : Sélectionner tout
new Boolean( ${F1}<0)
Et en positionnant une valeur de rouge pour la propriété Backcolor.

Ensuite on sélectionne le TextField concerné et on positionne sa propriété Style à ST1.

Lors de l'exécution, le TextField aura bien comme couleur de fond la couleur définie en fonction de son contenu.

Mis à jour le 12 mai 2009 Gabriel.Entressangle

  • 1. Activer la bande NoData dans les propriétés du rapport et de mettre sa taille à zéro.
  • 2. Mettre tous les champs du sous rapport à remove line when blank
  • 3. Dans le rapport principal mettre la hauteur du sous rapport à 0

Mis à jour le 12 mai 2009 nannous

Solution 1 : Faire cette multiplication dans la requête SQL (au cas où l'on utilise SQL).

Solution 2 : Créer une variable et mettre dans sa propriété Expression de variable :

Code java : Sélectionner tout
 new java.lang.Integer(  ($F{Champ1}.intValue()) *($F{Champ2}.intValue()) )

Mis à jour le 12 mai 2009 JauB

Il suffit d'ajouter dans la méthode le code :

Code java : Sélectionner tout
Locale.setDefault( new Locale(taLangue) );

Mis à jour le 14 novembre 2011

Insérer un objet de type Image dans le rapport. Cliquer droit sur cet objet inséré et choisir propriétés --> Onglet Image --> Cliquer sur Rechercher... et sélectionner votre image.

Mis à jour le 14 novembre 2011 JauB

Procéder comme suit :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
File destFile = new File(nomFichier); 
JRPdfExporter exporter = new JRPdfExporter(); 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); 
...... 
exporter.setParameter( 
JRPdfExporterParameter.PERMISSIONS,  
new Integer(PdfWriter.AllowCopy | PdfWriter.AllowPrinting|PdfWriter.AllowScreenReaders) 
                ); 
exporter.exportReport();

Mis à jour le 14 novembre 2011 JauB

Cocher la propriété Stretch With Overflow du Text Field.

Mis à jour le 14 novembre 2011 JauB

Il suffit de mettre dans la propriété imprimer si expression (print when expression) de l'image le code suivant :

Code java : Sélectionner tout
new Boolean(($V{PAGE_NUMBER}.intValue()!=1) ? true : false )

Mis à jour le 14 novembre 2011 JauB

La syntaxe XML du (jrxml) : Il faut utiliser l'attribut orientation de la balise plot dans la balise <b><barPlot></b>

Code xml : Sélectionner tout
1
2
3
4
<barPlot> 
     <plot orientation="Horizontal"/> 
     .... 
</barPlot>
Avec l'éditeur graphique : Dans la palette Properties du chart, il y a une section Common chart properties (la deuxième) et Orientation est la dernière propriété. => Les choix sont Vertical ou Horizontal.

Code xml : Sélectionner tout
1
2
3
4
<barPlot> 
     <plot orientation="Horizontal"/> 
     .... 
</barPlot>

Mis à jour le 14 novembre 2011 jmini

En cliquant sur la checkbox, cela ajoute une valeur, une condition dans la requête principale, si on ne clique pas cela n'ajoute rien.

Exemple dans le cas où l'on souhaite afficher dans un report des commandes annulées ou ne pas les afficher :

Etape 1: Création du Paramètre St_Com_Bool :

Créer un paramètre nommé St_Com_Bool et l'identifier comme un type Boolean. Ce paramètre servira de lien entre l'input control et la requête.

Etape 2: Création du Paramètre St_Com :

Créer un paramètre nommé St_Com et l'identifier comme un type String. Implanter comme valeur d'expression par défaut :

Code xml : Sélectionner tout
(P${St_Com_Bool}==true ? Where Statut_Commmande like "annulée","")
Etape 3 : Dans la Requête :

Ecrire dans la requête principale un paramètre tel que :

Code xml : Sélectionner tout
Select * from matable $P!{St_Com}
Etape 4 : Dans l'input control :

Créer un input control de type boolean qui porte le même non que le paramètre booléan : St_Com_Bool.

Mis à jour le 14 novembre 2011 ALLODREN

Il faut mettre la propriété Position Type à Float.

Mis à jour le 14 novembre 2011 JauB

Click droit sur le textfield et choisir Hyperlink dans le menu.

Mis à jour le 14 novembre 2011 JauB

Il suffit de mettre

Code java : Sélectionner tout
isIgnorePagination="true"
dans la balise ouvrante <b><jasperreport></b> du jrxml.

Mis à jour le 14 novembre 2011 JauB

Il suffit d'implémenter un BigDecimal avec son BigDecimalFormatSymbols associé selon la locale :

Format Français :

Code java : Sélectionner tout
new DecimalFormat("#,##0.00",new DecimalFormatSymbols(Locale.FRENCH)).format($F{DEVIS_MT})
Format Anglais :

Code java : Sélectionner tout
new DecimalFormat("#,##0.00",new DecimalFormatSymbols(Locale.ENGLISH)).format($F{DEVIS_MT})

Mis à jour le 14 novembre 2011 JauB

-> Il faut compter le nombre de lignes affichables dans le tableau (en 1ère page et suivantes) et imprimer un saut de page avant d'imprimer une ligne s'il n'y a pas de la place pour afficher la ligne totale dans le tableau :

-> Le saut de page est placé avant la définition d'une ligne de mon tableau (haut 0 ; la ligne commençant en haut 1)

Code java : Sélectionner tout
1
2
3
4
5
6
// Code de la zone "imprimer si expression" de l'objet saut_de_page 
  
($V{REPORT_COUNT}.intValue() == $P{NB_TAB_LINE_PAGE_1}.intValue() ? Boolean.TRUE :  
  (($V{REPORT_COUNT}.intValue()-$P{NB_TAB_LINE_PAGE_1}.intValue()) % $P{NB_TAB_LINE_PAGE_2}.intValue() == 0 ? Boolean.TRUE : Boolean.FALSE 
  ) 
)
Ci-dessus :

  • $V{RECORD_COUNT} : Le Nombre d'impression actuelle de la ligne du tableau
  • $P{NB_TAB_LINE_PAGE_1} : Le nombre de ligne imprimable sur la première page où apparaît mon tableau (laissant la place de la ligne total)
  • $P{NB_TAB_LINE_PAGE_2} : Le nombre de ligne imprimable sur les pages suivantes où apparaît mon tableau (laissant la place de la ligne total)

Mis à jour le 14 novembre 2011 Alaster

Dans un premier temps, il faut étendre la classe JRviewer de la facon suivante

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class NeoJRViewer extends JRViewer { 
  
    JasperPrint jasperPrint ; 
  
    public NeoJRViewer(JasperPrint jp) { 
        super(jp) ; 
    } 
  
// ON REECRIT LA METHODE initSaveContributors EN COMMENTANT 
// LES FORMATS DE SAUVEGARDE QUE L'ON NE VEUT PAS GARDER 
  
    @Override 
    protected void initSaveContributors() { 
        final String[] DEFAULT_CONTRIBUTORS = { 
//        "net.sf.jasperreports.view.save.JRPrintSaveContributor", 
        "net.sf.jasperreports.view.save.JRPdfSaveContributor" 
//        "net.sf.jasperreports.view.save.JRRtfSaveContributor", 
//        "net.sf.jasperreports.view.save.JROdtSaveContributor", 
//        "net.sf.jasperreports.view.save.JRHtmlSaveContributor", 
//        "net.sf.jasperreports.view.save.JRSingleSheetXlsSaveContributor", 
//        "net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor", 
//        "net.sf.jasperreports.view.save.JRCsvSaveContributor", 
//        "net.sf.jasperreports.view.save.JRXmlSaveContributor", 
//        "net.sf.jasperreports.view.save.JREmbeddedImagesXmlSaveContributor" 
        }; 
  
  
// CE BOUT DE CODE PERMET D'INITIALISER LA VARIABLE saveContributors 
// CONTENUE DANS JRViewer 
        for(int i=0; i<DEFAULT_CONTRIBUTORS.length; i++) { 
            try { 
            Class saveContribClass = JRClassLoader.loadClassForName(DEFAULT_CONTRIBUTORS[i]) ; 
            Constructor constructor = saveContribClass.getConstructor(new Class[]{Locale.class, ResourceBundle.class}) ; 
            JRSaveContributor saveContrib = (JRSaveContributor)constructor.newInstance(new Object[]{getLocale(), null}) ; 
            saveContributors.add(saveContrib) ; 
            } catch (Exception e) { 
                System.err.println(e) ; 
            } 
        } 
    } 
}
Une fois ceci fait, on crée une nouvelle JFrame dans laquelle on rajoute NeoJRViewer grâce a une méthode du genre :

Code java : Sélectionner tout
1
2
3
4
5
public void viewReport(JasperPrint jasperPrint) { 
         this.viewer = new NeoJRViewer(jasperPrint) ; 
         this.getContentPane().setLayout(new BorderLayout()) ; 
         this.getContentPane().add(viewer) ; 
}

Mis à jour le 14 novembre 2011 baxou087

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2018 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Contacter le responsable de la rubrique Business Intelligence