IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Autres concepts de JasperReports
        A quoi servent les subdatasets?
        Comment écrire une requête SQL avec un paramètre?
        Comment faire une sommation d'un champ dans le sommaire?
        Comment ajouter un Driver d'une base de données?
        Comment afficher pour chaque ligne son numéro de ligne ?
        Comment formater une date dans l'expression d'un champ textfield ?
        Comment passer un paramètre à partir d'une Classe Java à un état Jasper ?
        Comment générer un rapport avec Jasper Report dans un format exploitable par Open Office ?
        Comment affecter une valeur d'une variable en fonction d'un paramètre
        Comment modifier la clause de sa requête en fonction d'un paramètre ?
        Exemple de génération d'un rapport JasperReports à partir d'une source CSV ?
        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 passer une liste de paramètres pour le même champ sous l'invite de iReport ?



A quoi servent les subdatasets?
auteur : candre
Un subdataset est un concept à mi-chemin entre la source de données et le sous-rapport: ils permettent au programme de parcourir un certain nombre d'enregistrements (comme une datasource) mais ils permettent aussi l'utilisation de calculs et de paramètres (comme un sous-rapport).


Comment écrire une requête SQL avec un paramètre?
auteur : JauB
Vous devez créer tout d'abord votre paramètre myParametre par exemple. Votre requête ressemblera à :

SELECT * 
FROM  maTable
WHERE monChamp = $P{myParametre}

Comment faire une sommation d'un champ dans le sommaire?
auteur : JauB
Vous devez créer une variable qui contiendra la somme de ce champ et la placer dans la bande sommaire. Les propriétés de cette variable doivent être comme suit :

  • Type de calcul : somme
  • Réinitialiser le type : Rapport

Comment ajouter un Driver d'une base de données?
auteur : JauB
Aller dans : Options Classpath

Cliquer sur Ajouter JAR

et sélectionner votre JAR.


Comment afficher pour chaque ligne son numéro de ligne ?
auteur : shuryyy
Il suffit d'utiliser la variable interne Report_count.


Comment formater une date dans l'expression d'un champ textfield ?
auteur : edno
Créer une variable de type java.text.SimpleDate.

<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() :

<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) :

<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 :

<textFieldExpression   class="java.lang.String"> 
    <![CDATA[$V{outFormatDate}.format($V{inFormatDate}.parse($F{date}))]]> 
</textFieldExpression>

Comment passer un paramètre à partir d'une Classe Java à un état Jasper ?
auteur : JauB
Il faut tout d'abord créer le paramère sour iReport. Le même nom de paramètre doit être utilisé côté Java.
HashMap mesParametres = new HashMap();
mesParametres.put("myParameter", new String("myValue"));
JasperPrint jasperPrint = 
           JasperManager.fillReport(
		                new FileInputStream(new File(file, reportId + "myJasper.jasper")), 
							         mesParametres, maConnection);
		   

Comment générer un rapport avec Jasper Report dans un format exploitable par Open Office ?
auteur : JauB
L'export sera au format Odt (Open Office).
// Export au format Odt (Open Office)
JROdtExporter exporter = new JROdtExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);
exporter .exportReport();

Comment affecter une valeur d'une variable en fonction d'un paramètre
auteur : arno a.
Dans un rapport, nous avons un paramètre $P{Paramètre} qui peut prendre comme valeur Y ou N.

En fonction de ce paramètre, nous souhaitons conditionner une variable $V{Variable} de la manière suivante :

  • si Paramètre = Y alors Variable = "Y, N"
  • si Paramètre = N alors Variable = "N"
Pour ce faire, il faut donc créer la variable $V{Variable} avec pour expression de variable :
$P{Paramètre}.equals("Y") ? "Y, N" : "N"

Comment modifier la clause de sa requête en fonction d'un paramètre ?
auteur : candre
Créer un paramètre de type String et placez votre expression dans l'attribut valeur par défaut du paramètre. puis placez votre paramètre comme suit :
SELECT colonne1
FROM table1
WHERE    $P{monParametre}
warning utiliser un paramètre $P! pour éviter les histoires de "quotes" rajoutés.
SELECT colonne1
FROM   table1
WHERE  $P!{monParametre}

Exemple de génération d'un rapport JasperReports à partir d'une source CSV ?
auteur : Peanut
// Exemple de génération de rapport JasperReports à partir d'une source CSV
// (validé avec jasperreports-1.2.6.jar - LY 09/2006)
 
//
// Exemple de fichier CSV utilisé en entrée :
// => ne pas oublier le caractère séparateur en fin de ligne !
//
// 	animal;mange;couleur;
// 	sanglier;glands;beige;
// 	vache;herbe;blanche;
// 	chat;souris;gris;
//
 
import java.io.*;
 
// import de la classe "HashMap" pour l'envoi de paramètres à un rapport
import java.util.HashMap;
 
// import du moteur de la librairie JasperReports
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRCsvDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.design.JRDesignField;
//import net.sf.jasperreports.engine.export.JRCsvExporter;
//import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
 
public class generatepdffromcsv
{
	public static void main(String[] args)
	{
		HashMap params = new HashMap();
		//String[] nomCols = {"animal", "mange", "couleur"};	// <- si on n'utilise pas 'setUseFirstRowAsHeader' **
 
		try
		{
			
			System.out.println("Et c'est parti...");
			
			// Passage de paramètres (facultatif)
			//params.put("", "");
 
			// Chargement et compilation du rapport
			System.out.print("+ chargement et compilation du rapport JRXML");
			JasperDesign jasperDesign = JRXmlLoader.load("essai11.jrxml");
			JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
			System.out.println(" : OK");
			
			// Déclaration de la source de données
			System.out.print("+ déclaration de la source de données CSV");
			File sourceFile = new File("essai1.csv");
			JRCsvDataSource source = new JRCsvDataSource(sourceFile);
			source.setFieldDelimiter(';');
			//source.setColumnNames(nomCols);	// <- si on n'utilise pas 'setUseFirstRowAsHeader' **
			source.setUseFirstRowAsHeader(true);
			System.out.println(" : OK");
			
			// Export du rapport au format temporaire 'jasperPrint'
			System.out.print("+ export du rapport au format intermédiaire 'jasperPrint'");
			JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, source);
			//équivalent à JasperPrint jasperPrint = JasperFillManager.fillReport("essai1.jasper", params, source);
			System.out.println(" : OK");
 
 
			// puis export du rapport au format cible
			JasperExportManager exporter = new JasperExportManager();
 
			System.out.print("+ conversion au format cible PDF");
			exporter.exportReportToPdfFile(jasperPrint, "essai1.pdf");
			System.out.println(" : OK");
 
			System.out.print("+ conversion au format cible HTML");
			exporter.exportReportToHtmlFile(jasperPrint, "essai1.html");
			System.out.println(" : OK");
 
			System.out.print("+ conversion au format cible XML");
			exporter.exportReportToXmlFile(jasperPrint, "essai1.xml", false);
			System.out.println(" : OK");
 
			System.out.println("That's all folks !");
		}
		catch (Exception e)
		{
			System.out.println(e.getMessage());
		}
	}
}
Et une variante, si vous ne voulez pas de caractère séparateur en fin de ligne, il suffit de rajouter :
private static final String CTE_S_CRLF_UNIX = "\n";//retour à la ligne Unix
private static final String CTE_S_CRLF_DOS = "\r\n";	//retour à la ligne Dos/Windows
private static final String CTE_S_CRLF_MAC = "\r";	//retour à la ligne Mac
 
source.setRecordDelimiter(sCRLF);

Comment cacher une bande au sein d'un rapport ?
auteur : 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.


Comment personnaliser une case en fonction de son contenu ?
auteur : Gabriel.Entressangle
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 :
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 :
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.


Comment faire pour avoir un sous rapport avec une taille qui dépend du nombre des enregistrements qu'il contient ?
auteur : nannous
  • 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

Comment multiplier deux champs sur un rapport ?
auteur : JauB
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 :
 new java.lang.Integer(  ($F{Champ1}.intValue()) *($F{Champ2}.intValue()) )

Comment passer une liste de paramètres pour le même champ sous l'invite de iReport ?
auteur : JauB
Créer un paramètre et faire précéder le paramètre de la requête SQL du rapport par un ! . A l'exécution du rapport, saisir dans l'invite les paramètres souhaités séparés par des virgules pour respecter la syntaxe SQL.

Exemple :
SELECT *
FROM   maTbale 
WHERE  mon code IN ($P!{monParametre})
A l'exécution saisir : CODE1, CODE2, CODE3, ...



Consultez les autres F.A.Q's


Valid XHTML 1.1!Valid CSS!

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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.