FAQ Jasper/iReportConsultez toutes les FAQ
Nombre d'auteurs : 22, 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.
- Comment afficher pour chaque ligne son numéro de ligne ?
- Comment formater une date dans l'expression d'un champ textfield ?
- Comment générer un rapport avec Jasper Report dans un format exploitable par Open Office ?
- Comment cacher une bande au sein d'un rapport ?
- Comment personnaliser une case en fonction de son contenu ?
- Comment faire pour avoir un sous rapport avec une taille qui dépend du nombre des enregistrements qu'il contient ?
- Comment multiplier deux champs sur un rapport ?
- Comment choisir la lange d'un champ Date ?
- Comment insérer une image statique dans un état ?
- Comment empêcher la modification d'un fichier PDF généré par JasperReports à l'aide d'un autre outil ?
- Comment faire pour insérer un champs qui s'adapte à un contenu de taille variable ?
- Comment afficher une image sur toutes les pages à part la première page ?
- Comment créer un diagramme en baton horizontal avec iReport ?
- Comment créer une checkbox avec choix booléen ?
- Comment décaler dynamiquement un élément vers le bas ?
- Comment créer un lien hypertext dans un textfield ?
- Comment mettre toutes les données à la suite dans un export au format xls (ne pas avoir 1 page de pdf == 1 classeur sous excel) ?
- Comment afficher un montant formaté à 2 décimales selon la locale ?
- Comment éviter une ligne de totalisation orpheline dans un tableau de données XML multi-pages ?
- Comment personnaliser les formats de sauvegarde avec JRViewer?
Il suffit d'utiliser la variable interne Report_count.
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> |
Code xml : | Sélectionner tout |
1 2 3 | <textFieldExpression class="java.lang.String"> <![CDATA["Facturation mois " + $V{outFormatDate}.format(new java.util.Date()) ]]> </textFieldExpression> |
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> |
Code xml : | Sélectionner tout |
1 2 3 | <textFieldExpression class="java.lang.String"> <![CDATA[$V{outFormatDate}.format($V{inFormatDate}.parse($F{date}))]]> </textFieldExpression> |
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(); |
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.
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)
On réitère le step précédent mais en définissant une condition :
Code java : | Sélectionner tout |
new Boolean( ${F1}<0)
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.
- 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
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()) )
Il suffit d'ajouter dans la méthode le code :
Code java : | Sélectionner tout |
Locale.setDefault( new Locale(taLangue) );
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.
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(); |
Cocher la propriété Stretch With Overflow du Text Field.
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 )
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> |
Code xml : | Sélectionner tout |
1 2 3 4 | <barPlot> <plot orientation="Horizontal"/> .... </barPlot> |
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","")
Ecrire dans la requête principale un paramètre tel que :
Code xml : | Sélectionner tout |
Select * from matable $P!{St_Com}
Créer un input control de type boolean qui porte le même non que le paramètre booléan : St_Com_Bool.
Il faut mettre la propriété Position Type à Float.
Click droit sur le textfield et choisir Hyperlink dans le menu.
Il suffit de mettre
Code java : | Sélectionner tout |
isIgnorePagination="true"
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})
Code java : | Sélectionner tout |
new DecimalFormat("#,##0.00",new DecimalFormatSymbols(Locale.ENGLISH)).format($F{DEVIS_MT})
-> 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 ) ) |
- $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)
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) ; } } } } |
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) ; } |
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 çaLes 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 © 2024 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.