Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/06/2011, 14h50   #1
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Par défaut [2.6.2] Tableaux : Image Police Pagination

Bonjour,
je suis sur le développement en Java de rapports à l'aide de l'API Birt

J'utilise Birt 2.6.2 et eclipse.
J'ai un Grid avec des Rows, des Labels, des Cells et un StyleHandle pour mes cells:

je voudrais :
-insérer une image dans une cellule du tableau (pas en background) : doit-on mettre l'image à la bonne dimension ou alors est-ce géré par quelconque fonction ? et aussi l'aligner à droite ou au centre ...
j'ai essayé d'ajouter une image en arrière plan sans répétition et en ajoutant du texte vide avec des \n mais c'est moche de faire comme ça

- mettre du texte en gras. On a les constantes FONT_SIZE_(bidule) de la classe DesignChoiceConstants mais je sais pas avec quelle fonction les utiliser.

j'ai cherché du coté de styleHandle.setFontStyle()
mais elle ne prend pas en paramètre autre chose que les FONT_STYLE_(machin) constantes. De plus, styleHandle.setFontSize() n'existe pas

- insérer une pagination. Dois-je faire une ligne supplémentaire à mon tableau à chaque fin de page avec numéro et numéro page ou pas ?

- faire un saut de page inconditionnel

tout cela en java
Merci pour vos réponses

EDIT : J'ai aussi des problèmes pour lancer mon rapport PDF lorsqu'il est fini, et lorsque la compilation est terminée, XP me dit qu'il est utilisé par une autre tache...
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 16h57   #2
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Bonjour,

Citation:
Envoyé par n0nal Voir le message
-insérer une image dans une cellule du tableau (pas en background) : doit-on mettre l'image à la bonne dimension ou alors est-ce géré par quelconque fonction ? et aussi l'aligner à droite ou au centre ...
j'ai essayé d'ajouter une image en arrière plan sans répétition et en ajoutant du texte vide avec des \n mais c'est moche de faire comme ça
Je crois qu'il faut mettre des dimensions mais ça reste à vérifier et à tester (avec une image bidon dans un premier temps).
Citation:
Envoyé par n0nal Voir le message
- mettre du texte en gras. On a les constantes FONT_SIZE_(bidule) de la classe DesignChoiceConstants mais je sais pas avec quelle fonction les utiliser.
Ben, cette classe peut te servir à récupérer des noms proprement mais rien d'exceptionnel.
Citation:
Envoyé par n0nal Voir le message
j'ai cherché du coté de styleHandle.setFontStyle()
mais elle ne prend pas en paramètre autre chose que les FONT_STYLE_(machin) constantes. De plus, styleHandle.setFontSize() n'existe pas
Tu t'orientes un peu mieux. Si tu utilisais le Designer, tu pourrais t'apercevoir que font style est séparé de font weight (qui défini l'épaisseur de l'écriture), tu dois donc utiliser la méthode setFontWeight() avec un String en paramètre et non un DesignChoiceConstants. Mais tu trouveras les valeurs dans DesignChoiceConstants (ce sont les DesignChoiceConstants.FONT_WEIGHT_[X]).
La méthode setFontSize() n'existe effectivement pas malgré qu'elle devrait l'être mais ce n'est pas bien grave, tu peux aussi essayer d'utiliser setStringProperty(DesignChoiceConstants.CHOICE_FONT_SIZE, DesignChoiceConstants.FONT_SIZE_[X]).
Citation:
Envoyé par n0nal Voir le message
- insérer une pagination. Dois-je faire une ligne supplémentaire à mon tableau à chaque fin de page avec numéro et numéro page ou pas ?
Non, il faut que tu édites la Master Page et tu ajoutes dans le Footer ou le Header (à ta guise), un AutoText. Je pourrais t'aider plus en profondeur sur ce point si tu n'y arrives pas.
Citation:
Envoyé par n0nal Voir le message
- faire un saut de page inconditionnel
Il y a différents types de sauts de page conditionnels. A quoi correspond le tien ?

Citation:
Envoyé par n0nal Voir le message
EDIT : J'ai aussi des problèmes pour lancer mon rapport PDF lorsqu'il est fini, et lorsque la compilation est terminée, XP me dit qu'il est utilisé par une autre tache...
On regarde ça après, peut être une mauvaise fermeture de la tâche de rendu BIRT.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 10h17   #3
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Bonjour,

Citation:
Envoyé par BiM Voir le message
Je crois qu'il faut mettre des dimensions mais ça reste à vérifier et à tester (avec une image bidon dans un premier temps).
On a la fonction getHeight() mais pas setHeight() pour un objet de type CellHandle...

Citation:
Envoyé par BiM Voir le message
Tu t'orientes un peu mieux. Si tu utilisais le Designer, tu pourrais t'apercevoir que font style est séparé de font weight (qui défini l'épaisseur de l'écriture), tu dois donc utiliser la méthode setFontWeight() avec un String en paramètre et non un DesignChoiceConstants. Mais tu trouveras les valeurs dans DesignChoiceConstants (ce sont les DesignChoiceConstants.FONT_WEIGHT_[X]).La méthode setFontSize() n'existe effectivement pas malgré qu'elle devrait l'être mais ce n'est pas bien grave, tu peux aussi essayer d'utiliser setStringProperty(DesignChoiceConstants.CHOICE_FONT_SIZE, DesignChoiceConstants.FONT_SIZE_[X]).
Code :
1
2
styleHandle.setStringProperty(DesignChoiceConstants.CHOICE_FONT_SIZE, DesignChoiceConstants.FONT_SIZE_XX_LARGE);
styleHandle.setFontWeight(DesignChoiceConstants.FONT_WEIGHT_BOLD);
ca marche du tonnerre !

Citation:
Envoyé par BiM Voir le message
Non, il faut que tu édites la Master Page et tu ajoutes dans le Footer ou le Header (à ta guise), un AutoText. Je pourrais t'aider plus en profondeur sur ce point si tu n'y arrives pas.
je veux bien que tu éclaires ma lanterne...
J'imagine qu'il faut créer un objet
SimpleMasterPage masterPage = new SimpleMasterPage();
après avoir regardé la doc, je n'ai pas trouvé la méthode adéquate

Citation:
Envoyé par BiM Voir le message
Il y a différents types de sauts de page conditionnels. A quoi correspond le tien ?
beh par exemple, j'ai mon tableau qui prend plusieurs pages. Et la dernière ligne de la page se trouve tronquée et apparait à moitié sur la page courante et l'autre moitié sur la page suivante.

Citation:
Envoyé par BiM Voir le message
On regarde ça après, peut être une mauvaise fermeture de la tâche de rendu BIRT.
j'utilise une classe GenerateFinal :
(dans les paramètres de la fonction run, je lui envoie new HashMap<String, Object>() ne sachant pas trop quoi lui donner!)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.HashMap;
import java.util.Locale;
 
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.report.engine.api.RenderOption;
 
public class GenerateFinal {
 
	public GenerateFinal (String name, String format) throws BirtException {
 
		// get the engine's instance
		Edition edition = Edition.getInstance(); 
 
		// service initialization 
		edition.run(name, name , Locale.FRENCH , new HashMap<String, Object>()); 
 
		// create the state in  the output format file
		edition.render(name , format); 
 
		}
	}

Qui appelle ta classe Edition (trouvée sur ce site)

Code :
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import java.util.Locale;
import java.util.Map;
import java.util.logging.Level;
 
import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IRenderOption;
import org.eclipse.birt.report.engine.api.IRenderTask;
import org.eclipse.birt.report.engine.api.IReportDocument;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunTask;
import org.eclipse.birt.report.engine.api.RenderOption;
 
/**
 * Cette classe permet la génération dans n'importe quel format
 * de n'importe quelle édition.
 * Il faut d'abord l'instancier, puis on lance le rapport et on
 * fait le rendu.
 * Si nécessaire, cette classe peut être threadée facilement.
 * 
 * @author BiM
 *
 */
public final class Edition {
	private static final String ENGINE_PATH = "C:\\Birt\\birt-runtime-2_6_2\\ReportEngine";
	private static final String REPORT_PATH = "C:\\";
	private static Edition m_Instance = null;
	private IReportEngine engine;
 
	/**
	 * Constructeur.
	 * Il configure le moteur BIRT de sorte à ce qu'il puisse retrouver
	 * les ressources BIRT mais également les librairies le faisant tourner
	 * Il est alors démarré avec cette configuration.
	 * @throws BirtException
	 */
	private Edition() throws BirtException {
		EngineConfig config = new EngineConfig();
		config.setBIRTHome(ENGINE_PATH);
		Platform.startup(config);
		IReportEngineFactory factory = (IReportEngineFactory) Platform
			.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
		engine = factory.createReportEngine(config);
		engine.changeLogLevel(Level.OFF);
	}
 
	/**
	 * Instanciation du service.
	 * @return l'instance en cours du service
	 * @throws BirtException
	 */
	public static synchronized Edition getInstance() throws BirtException {
		if (m_Instance == null) {
			m_Instance = new Edition();
		}
		return m_Instance;
	}
 
	/**
	 * Génération de l'état.
	 * @param _input Nom du fichier d'entrée sans l'extension (rptdesign), le fichier de sortie portera le même nom
	 * @param _langue Locale pour définir la langue de génération du rapport
	 * @param _parameters Map contenant les paramètres du rapport sous la forme <Nom, Valeur>
	 * @throws EngineException 
	 */
	public synchronized void run(String _input, Locale _langue, Map<String, Object> _parameters) throws EngineException {
		this.run(_input, _input, _langue, _parameters);
	}
 
	/**
	 * Génération de l'état.
	 * @param _input Nom du fichier d'entrée sans l'extension (rptdesign)
	 * @param _output Nom du fichier de sortie sans l'extension (rptdocument)
	 * @param _langue Locale pour définir la langue de génération du rapport
	 * @param _parameters Map contenant les paramètres du rapport sous la forme <Nom, Valeur>
	 * @throws EngineException 
	 */
 	public synchronized void run(String _input, String _output, Locale _langue, Map<String, Object> _parameters) throws EngineException {
		IRunTask runTask = null;
		try {
			/* Récupération du rptDesign */
			IReportRunnable design = engine.openReportDesign(REPORT_PATH + _input + ".rptdesign");
 
			/* Création de la tâche d'éxécution */
			runTask = engine.createRunTask(design);
 
			/* Paramètres */
			runTask.setParameterValues(_parameters);
 
			/* Langue */
			runTask.setLocale(_langue);
 
			/* Exécution */
			runTask.run(REPORT_PATH + _output + ".rptdocument");
		}
		finally {
			if (runTask != null) {
				runTask.close();
			}
		}
	}
 
	/**
	 * Rendu de l'état.
	 * @param _input Nom du fichier d'entrée sans l'extension (rptdocument)
	 * @param _format Format de sortie du fichier
	 * @throws EngineException
	 */
 	public synchronized void render(String _input, String _format) throws EngineException {
 		this.render(_input, _input, _format);
 	}
 
	/**
	 * Rendu de l'état.
	 * @param _input Nom du fichier d'entrée sans l'extension (rptdocument), le fichier de sortie portera le même nom.
	 * @param _output Nom du fichier de sortie sans l'extension (format final)
	 * @param _format Format de sortie du fichier
	 * @throws EngineException
	 */
	public synchronized void render(String _input, String _output, String _format) throws EngineException {
		IReportDocument doc = null;
		IRenderTask renderTask = null;
		try {
			/* Création des options de rendu */
			IRenderOption option = new RenderOption();
 
			/* Fichier et format de sortie */
			option.setOutputFileName(REPORT_PATH + _output + "." + _format);
			option.setOutputFormat(_format);
 
			/* Récupération du rptDocument */
			doc = engine.openReportDocument(REPORT_PATH + _output + ".rptdocument");
 
			/* Rendu */
			renderTask = engine.createRenderTask(doc);
 
			/* Chargement des options de rendu */
			renderTask.setRenderOption(option);
 
			/* Création du fichier de rendu */
			renderTask.render();
		}
		finally {
			if (renderTask != null) {
				renderTask.close();
			}
			if (doc != null) {
				doc.close();
			}
		}
	}
 
	/**
	 * Permet de détruire le moteur de façon propre.
	 */
	public void destructeur() {
		engine.destroy();
		Platform.shutdown();
		m_Instance = null;
	}
}
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 10h33   #4
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Citation:
Envoyé par n0nal Voir le message
On a la fonction getHeight() mais pas setHeight() pour un objet de type CellHandle...
Même astuce que pour le style.

Citation:
Envoyé par n0nal Voir le message
je veux bien que tu éclaires ma lanterne...
J'imagine qu'il faut créer un objet
SimpleMasterPage masterPage = new SimpleMasterPage();
après avoir regardé la doc, je n'ai pas trouvé la méthode adéquate
J'ai pas essayé mais tente un truc comme ça :
Code Java :
1
2
3
4
SimpleMasterPageHandle masterPage = factory.newSimpleMasterPage("Page Master");
AutoTextHandle autoText = factory.newAutoText("NumeroPage");
autoText.setAutoTextType(DesignChoiceConstants.AUTO_TEXT_PAGE_NUMBER);
masterPage.getPageFooter().add(autoText);

Citation:
Envoyé par n0nal Voir le message
beh par exemple, j'ai mon tableau qui prend plusieurs pages. Et la dernière ligne de la page se trouve tronquée et apparait à moitié sur la page courante et l'autre moitié sur la page suivante.
Essaye d'ajouter sur chaque ligne du tableau un page break inside à avoid.

Pour le reste, je regarde si effectivement je reproduis le problème et comment le résoudre.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 10h57   #5
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Avec exactement le même appel que toi et la même classe, je ne reproduis pas le problème d'utilisation du PDF. Peut être que tu essayes de l'ouvrir avant que la tâche de rendu soit achevée.

Tu peux rajouter des logs pour visualiser quand les tâches de génération et de rendu sont réellement finies.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 11h36   #6
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Citation:
Envoyé par BiM Voir le message
Avec exactement le même appel que toi et la même classe, je ne reproduis pas le problème d'utilisation du PDF. Peut être que tu essayes de l'ouvrir avant que la tâche de rendu soit achevée.

Tu peux rajouter des logs pour visualiser quand les tâches de génération et de rendu sont réellement finies.
en fait, j'ai déjà des logs qui m'indique que j'ai terminé mais je suis obligé de cliquer sur "terminate" de la console pour pouvoir le lancer...

Citation:
Envoyé par BiM Voir le message
Même astuce que pour le style.
J'ai essayé ça :
Code :
1
2
styleHandle.setBackgroundImage("C://Image.jpg");
styleHandle.setStringProperty(DesignChoiceConstants.CHOICE_IMAGE_SIZE, DesignChoiceConstants.IMAGE_SIZE_SIZE_TO_IMAGE);
et j'obtiens ça
Code :
org.eclipse.birt.report.model.api.command.PropertyNameException: The property "imageSize" is invalid for element "null".
mon image est sur mon disque dur, je ne la récupère pas à partir d'une BDD,
est ce que c'est pour cela qu'il n'arrive pas à accéder à sa taille ?

Y-a-t-il une fonction pour aligner l'image à droite par exemple tandis que le texte est à gauche ? (sinon je séparerais en deux cases)

Citation:
Envoyé par BiM Voir le message
J'ai pas essayé mais tente un truc comme ça :
Code Java :
1
2
3
4
SimpleMasterPageHandle masterPage = factory.newSimpleMasterPage("Page Master");
AutoTextHandle autoText = factory.newAutoText("NumeroPage");
autoText.setAutoTextType(DesignChoiceConstants.AUTO_TEXT_PAGE_NUMBER);
masterPage.getPageFooter().add(autoText);
très bien !
Maintenant j'aimerais avec une affichage de type "Page 1 sur 10"

J'ai essayé d'ajouter plusieurs objets autoText à la masterPage mais il n'en prend qu'un
j'ai aussi essayé un truc plus farfelu du genre :
autoText.setAutoTextType("Page"+DesignChoiceConstants.AUTO_TEXT_PAGE_NUMBER+" sur "+DesignChoiceConstants.AUTO_TEXT_TOTAL_PAGE);

sans résultat
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 12h06   #7
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Citation:
Envoyé par n0nal Voir le message
en fait, j'ai déjà des logs qui m'indique que j'ai terminé mais je suis obligé de cliquer sur "terminate" de la console pour pouvoir le lancer...
Etant donné que je n'arrive pas à reproduire le problème, je ne peux pas vraiment te donner de solution.

Après, si c'est un lancement unique, tu peux ajouter un appel au destructeur à la fin de la génération complète.

Citation:
Envoyé par n0nal Voir le message
J'ai essayé ça :
Code :
1
2
styleHandle.setBackgroundImage("C://Image.jpg");
styleHandle.setStringProperty(DesignChoiceConstants.CHOICE_IMAGE_SIZE, DesignChoiceConstants.IMAGE_SIZE_SIZE_TO_IMAGE);
et j'obtiens ça
Code :
org.eclipse.birt.report.model.api.command.PropertyNameException: The property "imageSize" is invalid for element "null".
mon image est sur mon disque dur, je ne la récupère pas à partir d'une BDD,
est ce que c'est pour cela qu'il n'arrive pas à accéder à sa taille ?
Il y a de l'inspiration, je pense que tu es sur la bonne voie. Je regarderais un peu plus tard si je trouve une solution à ce problème.

Citation:
Envoyé par n0nal Voir le message
Y-a-t-il une fonction pour aligner l'image à droite par exemple tandis que le texte est à gauche ? (sinon je séparerais en deux cases)
J'ai essayé de mettre un display à inline pour un texte et une image et de jouer avec les alignements mais apparemment ce n'est pas très concluant. Je pense qu'il faut effectivement utiliser une grille.


Citation:
Envoyé par n0nal Voir le message
Maintenant j'aimerais avec une affichage de type "Page 1 sur 10"

J'ai essayé d'ajouter plusieurs objets autoText à la masterPage mais il n'en prend qu'un
j'ai aussi essayé un truc plus farfelu du genre :
autoText.setAutoTextType("Page"+DesignChoiceConstants.AUTO_TEXT_PAGE_NUMBER+" sur "+DesignChoiceConstants.AUTO_TEXT_TOTAL_PAGE);

sans résultat
Effectivement, les headers et footers n'acceptent qu'un seul élément. Il faut rajouter une grille avec une seule cellule (mettre sur les label et les autotext la propriété de style display à inline) ou quatre cellule (un élément par cellule). Donc il y a quatre éléments : deux labels avec le contenu "Page " et " sur " et deux autotext (numéro et nombre de page).
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 12h49   #8
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Voilà, tout ce code pour afficher " Page 'courante' sur 'total' "

Code :
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
// Création d'un élément Master Page
			SimpleMasterPageHandle masterPage = factory.newSimpleMasterPage("Page Master");
			GridHandle gridFooter = null;
			gridFooter = factory.newGridItem(null, 1,1);
			gridFooter.setWidth("100%");
			String footer1 = "Page";
			AutoTextHandle autoText1 = factory.newAutoText("NumeroPage");
			autoText1.setAutoTextType(DesignChoiceConstants.AUTO_TEXT_PAGE_NUMBER);
 
			String footer2 = " sur ";
			AutoTextHandle autoText2 = factory.newAutoText("TotalPage");
			autoText2.setAutoTextType(DesignChoiceConstants.AUTO_TEXT_TOTAL_PAGE);
			RowHandle rowFooter = null ;
			CellHandle cellFooter = null;
			LabelHandle labelFooter1 = null ;
			LabelHandle labelFooter2 = null ;
			labelFooter1 = factory.newLabel(null);
			labelFooter2 = factory.newLabel(null);
			labelFooter1.setText(footer1);
			labelFooter2.setText(footer2);
 
			autoText1.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
			autoText2.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
			labelFooter1.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
			labelFooter2.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
 
			rowFooter = (RowHandle) gridFooter.getRows().get(0);
			cellFooter = (CellHandle) rowFooter.getCells().get(0);
			cellFooter.getContent().add(labelFooter1);
			cellFooter.getContent().add(autoText1);
			cellFooter.getContent().add(labelFooter2);
			cellFooter.getContent().add(autoText2);
			StyleHandle styleHandleFooter = null ;
			styleHandleFooter = cellFooter.getPrivateStyle();
			styleHandleFooter.setTextAlign(DesignChoiceConstants.TEXT_ALIGN_RIGHT);
			masterPage.getPageFooter().add(gridFooter);
 
			// Ajout de l'élément au rapport
			design.getMasterPages().add(masterPage);

Citation:
Envoyé par BiM Voir le message
Etant donné que je n'arrive pas à reproduire le problème, je ne peux pas vraiment te donner de solution.

Après, si c'est un lancement unique, tu peux ajouter un appel au destructeur à la fin de la génération complète.
cela ne résout pas le problème
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 13h23   #9
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Version commentée et sans les initialisations inutiles
Code Java :
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
/*
 * Création d'un élément master page
 */
SimpleMasterPageHandle masterPage = factory.newSimpleMasterPage("Page Master");
/* Création de l'autotext de numéro de page */
AutoTextHandle autoText1 = factory.newAutoText("NumeroPage");
autoText1.setAutoTextType(DesignChoiceConstants.AUTO_TEXT_PAGE_NUMBER);
/* Création de l'autotext du total de pages */
AutoTextHandle autoText2 = factory.newAutoText("TotalPage");
autoText2.setAutoTextType(DesignChoiceConstants.AUTO_TEXT_TOTAL_PAGE);
/* Premier label */
LabelHandle labelFooter1 = factory.newLabel(null);
labelFooter1.setText("Page");
/* Second label */
LabelHandle labelFooter2 = factory.newLabel(null);
labelFooter2.setText(" sur ");
/* Affectation de display inline à tous les éléments */
autoText1.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
autoText2.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
labelFooter1.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
labelFooter2.setStringProperty(DesignChoiceConstants.CHOICE_DISPLAY, DesignChoiceConstants.DISPLAY_INLINE);
/* Création de la grille pour le footer */
GridHandle gridFooter = factory.newGridItem(null, 1,1);
gridFooter.setWidth("100%");
RowHandle rowFooter = (RowHandle) gridFooter.getRows().get(0);
CellHandle cellFooter = (CellHandle) rowFooter.getCells().get(0);
cellFooter.getContent().add(labelFooter1);
cellFooter.getContent().add(autoText1);
cellFooter.getContent().add(labelFooter2);
cellFooter.getContent().add(autoText2);
cellFooter.getPrivateStyle().setTextAlign(DesignChoiceConstants.TEXT_ALIGN_RIGHT);
masterPage.getPageFooter().add(gridFooter);
/* Ajout de la Master Page au rapport */
design.getMasterPages().add(masterPage);

Pour l'image, je viens de me rendre compte que tu l'utilises en background et non en image. Tu peux donc définir la position dans l'objet de l'arrière plan pour dire qu'il est aligné à droite.

Code Java :
styleHandle.setStringProperty(DesignChoiceConstants.CHOICE_BACKGROUND_POSITION_X, DesignChoiceConstants.BACKGROUND_POSITION_RIGHT);
ou
Code Java :
styleHandle.getBackGroundPositionX().setStringValue(DesignChoiceConstants.BACKGROUND_POSITION_RIGHT);


Je pense qu'il faut chercher avec un truc comme ça :
Code Java :
1
2
3
4
5
6
/* Background */
styleHandle.setBackgroundImage("Chemin image");
styleHandle.setBackgroundRepeat(DesignChoiceConstants.BACKGROUND_REPEAT_NO_REPEAT);
styleHandle.getBackGroundPositionX().setStringValue(DesignChoiceConstants.BACKGROUND_POSITION_RIGHT);
styleHandle.getBackgroundSizeWidth().setStringValue(DesignChoiceConstants.BACKGROUND_SIZE_CONTAIN);
styleHandle.getBackgroundSizeHeight().setStringValue(DesignChoiceConstants.BACKGROUND_SIZE_CONTAIN);
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 13h52   #10
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Je me demandais aussi comment réduire les marges extérieures!
En haut et en bas, on peut jouer avec des lignes vides si on travaille avec un tableau mais à gauche et à droite?
J'ai essayé
mais l'effet est la réduction de 10% par rapport à la normale mais que du coté droit

et aussi
Code :
1
2
3
grid.setWidth("80%");
grid.setX("10%");
grid.setY("10%");
sans résultat

Citation:
Envoyé par BiM Voir le message
Je pense qu'il faut chercher avec un truc comme ça :
Code Java :
1
2
3
4
5
6
/* Background */
styleHandle.setBackgroundImage("Chemin image");
styleHandle.setBackgroundRepeat(DesignChoiceConstants.BACKGROUND_REPEAT_NO_REPEAT);
styleHandle.getBackGroundPositionX().setStringValue(DesignChoiceConstants.BACKGROUND_POSITION_RIGHT);
styleHandle.getBackgroundSizeWidth().setStringValue(DesignChoiceConstants.BACKGROUND_SIZE_CONTAIN);
styleHandle.getBackgroundSizeHeight().setStringValue(DesignChoiceConstants.BACKGROUND_SIZE_CONTAIN);
parfait!


Citation:
Envoyé par BiM Voir le message
Essaye d'ajouter sur chaque ligne du tableau un page break inside à avoid..
j'ai essayé avec
Code :
row.setStringProperty(DesignChoiceConstants.CHOICE_PAGE_BREAK_INSIDE, DesignChoiceConstants.PAGE_BREAK_BEFORE_AVOID);
parfait!
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h22   #11
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Pour les marges...
Code Java :
1
2
3
4
5
6
7
/* La grille prendra la totalité de l'espace qu'il lui reste */
gridHandle.setWidth("100%");
 
/* Création des marges à droite et à gauche */
StyleHandle styleHandle = gridHandle.getPrivateStyle();
styleHandle.getMarginLeft().setStringValue("10%");
styleHandle.getMarginRight().setStringValue("10%");
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h32   #12
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Merci encore !

Edit :
Citation:
Envoyé par BiM Voir le message
Après, si c'est un lancement unique, tu peux ajouter un appel au destructeur à la fin de la génération complète.
ca marche aussi

tout marche ! :-D
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 16h25   #13
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
J'ai un tableau de 5 colonnes et 10 lignes.
J'aimerais fusionner deux cellules de mon tableau: les cellules 1, 2 et 3 de la ligne 1.

J'aimerais aussi fusionner deux cellules : les cellules 0 de la ligne 0 et 1.
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 16h42   #14
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Sur ton CellHandle, tu dois faire un setColumnSpan(nombre de colonnes à prendre en compte), par défaut, cette valeur est à 1, elle prend juste la colonne courante.

Si sur la première cellule (get(0)) tu fais setColumnSpan(3) et que tu as 5 colonnes. Lorsque tu passeras à la deuxième (get(1)), ce sera celle de la 4ème colonne.
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 17h16   #15
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
J'agis sur la ligne 0 de mon tableau 5 colonnes.
sur cette ligne, je veux une cellule vide ,
mon titre de tableau sur les 3 cellules du milieu,
et la dernière cellule vide.

Code :
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
row = (RowHandle) grid.getRows().get(0);
 
// Create a label and add it to the cell 0	
label = factory.newLabel(null);
cell = (CellHandle) row.getCells().get(0);
cell.getContent().add(label);
cell.setColumnSpan(1);
label.setText("");
 
 
// Create a label and add it to the cell 1	
label = factory.newLabel(null);
cell = (CellHandle) row.getCells().get(1);
cell.getContent().add(label);
cell.setColumnSpan(3);
label.setText(label0);
 
// formatage du css
StyleHandle styleHandle = cell.getPrivateStyle();
ColorHandle colorHandle = styleHandle.getBackgroundColor();
colorHandle.setRGB(13224393);
styleHandle.setFontStyle(DesignChoiceConstants.FONT_STYLE_ITALIC);
styleHandle.setStringProperty(DesignChoiceConstants.CHOICE_FONT_SIZE, DesignChoiceConstants.FONT_SIZE_LARGE);
styleHandle.setFontWeight(DesignChoiceConstants.FONT_WEIGHT_BOLD);
styleHandle.setTextAlign(DesignChoiceConstants.TEXT_ALIGN_CENTER);
styleHandle.setVerticalAlign(DesignChoiceConstants.VERTICAL_ALIGN_MIDDLE);
cell.setColumnSpan(5);
 
// Create a label and add it to the cell 4	
label = factory.newLabel(null);
cell = (CellHandle) row.getCells().get(4);
cell.getContent().add(label);
cell.setColumnSpan(1);
label.setText("");
mais cela agit aussi sur les autres lignes et déforme tout mon tableau
comme si j'avais mis gridFooter.setWidth("55%"); environ
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 11h16   #16
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
Tu as 5 colonnes à l'origine, tu as mis un label vide dans la première cellule, 1 label avec du texte dans la seconde cellule (mais tu l'as étalée sur 5 cellules, oui tu as laissé un setColumnSpan(5) traîné après le style) et 1 autre cellule avec un label vide.

Ca fait 7 et non 5 colonnes !

Peut être qu'en faisant un setColumnSpan(3) pour la seconde cellule ce serait déjà mieux...

Autre chose, quand tu veux laisser une cellule vide, il est inutile de mettre quelque contenu (même un label vide), ça alourdit le rapport pour rien.

Donc tu pourrais tout simplement faire :
Code Java :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
row = (RowHandle) grid.getRows().get(0);
 
// Create a label and add it to the cell 1	
label = factory.newLabel(null);
label.setText(label0);
cell = (CellHandle) row.getCells().get(1);
cell.getContent().add(label);
cell.setColumnSpan(3);
 
// formatage du css
StyleHandle styleHandle = cell.getPrivateStyle();
ColorHandle colorHandle = styleHandle.getBackgroundColor();
colorHandle.setRGB(13224393);
styleHandle.setFontStyle(DesignChoiceConstants.FONT_STYLE_ITALIC);
styleHandle.setStringProperty(DesignChoiceConstants.CHOICE_FONT_SIZE, DesignChoiceConstants.FONT_SIZE_LARGE);
styleHandle.setFontWeight(DesignChoiceConstants.FONT_WEIGHT_BOLD);
styleHandle.setTextAlign(DesignChoiceConstants.TEXT_ALIGN_CENTER);
styleHandle.setVerticalAlign(DesignChoiceConstants.VERTICAL_ALIGN_MIDDLE);
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 14h32   #17
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Je veux fusionner seulement les 3 cellules du milieu pour la première ligne (en haut de mon tableau),
or cela me fusionne les 3 cellules pour toutes les lignes...
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h27   #18
BiM
Modératrice
 
Avatar de BiM
 
Femme
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
Inscription : janvier 2005
Messages : 7 299
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 26
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

Informations forums :
Inscription : janvier 2005
Messages : 7 299
Points : 8 650
Points : 8 650
En fait avec le code que je t'ai donné, ça fusionne bien uniquement la première ligne d'une grille (on est dans le cas d'une grille visiblement, pas d'un tableau, mais on peut essayer avec un tableau aussi).

Cependant, il faut explicitement supprimer les cellules qui suivent :
Code Java :
1
2
3
4
5
6
7
8
9
10
11
12
13
/* Grille bidon */
GridHandle grid = factory.newGridItem(null, 5, 2);
grid.setWidth("100%");
RowHandle row = (RowHandle) grid.getRows().get(0);
CellHandle cellHandle = (CellHandle) row.getCells().get(1);
LabelHandle label = factory.newLabel(null);
label.setText("Test");
cellHandle.getContent().add(label);
cellHandle.setColumnSpan(3);
cellHandle = (CellHandle) row.getCells().get(2);
cellHandle.drop();
cellHandle = (CellHandle) row.getCells().get(3);
cellHandle.drop();

Dans le cas d'une table, on parle de ligne de détails, cette ligne sera répétée autant de fois qu'il y aura de données dans le DataSet, sinon il faut plutôt modifier le header de la table. Tu peux cependant avoir plusieurs lignes de détail, disons la première comporte le nom du client dans une cellule fusionnée et la seconde ses coordonnées. Mais pour chaque client tu auras en première ligne de détail une cellule fusionnée.

Tu as compris la subtilité entre les deux ?
__________________
__~{@ BiM - Modératrice "Business Intelligence" @}~
Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
___________.~{@ Lapine crétine @}~
BiM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h38   #19
Invité régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 27
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 27
Points : 9
Points : 9
Oui, j'ai compris, enfin !
Merci
n0nal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h39.


 
 
 
 
Partenaires

Hébergement Web