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 04/01/2007, 19h08   #1
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Par défaut Comment créer une table des matières dynamique: est-ce la bonne approche?

Bonjour,
en lisant les différents topic de ce forum j'ai cru comprendre que BIRT ne pouvait pas créer une table des matières automatiquement. Est-ce vrai?
Si on peut... comment???
Si on ne peut pas, j'ai pensé à ce système (j'en ai absolumment besoin):
1. Diviser chaque partie du rapport dans des librairies. J'appel ces 'parties' des composants (qui peuvent être des graphiques, des tableaux...). Ces composants, selon la requête du client, peuvent être présents ou pas dans le rapport;
2. Assembler dynamiquement les composants dans un rapport (le client veut le premier composant? oui alors l'insérer; il veut le deuxième? non alors passer au prochain et ainsi de suite jusqu'au dernier...);
3. Dans la première page du rapport prévoire un texte dynamique;
4. Dans ce champ dynamique il faut:
4.1. Ecrire le nom du composant;
4.2. Savoir à quelle page du rapport correspond ce composant;
4.3. Ecrire le numéro de la page juste après le nom du composant;
4.4. Passer à la ligne suivante.
Répéter de 4.1 jusqu'au 4.4 pour chaque composant présent.
Tout m'a l'air logique et faisable (avec un peu de patience), le seul problème c'est que je ne réussi pas à trouver la fonction qui trouve la page correspondante à un composant est-ce qu'elle existe? ou savez-vous un autre moyen pour trouver cette information??
sinon, mon approche est bonne ou quelqu'un sait comment réaliser une table des matières autrement (plus facilement)??
je vous remerci d'avance et vous souhaite une agréable journée (ou plutôt soirée)

Fred
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 09h49   #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
Salut !

Qu'est ce qu'une table des matières à ton sens ?

Par exemple, avec les groupes, tu as automatiquement les groupes référencés sous forme de chapitre dans ton PDF. Je pense que tu peux forcer ce référencement.
__________________
__~{@ 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 05/01/2007, 14h18   #3
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Salut et merci pour la réponse
par 'table des matières' j'entend, par exemple, ça: exemple quelconque trouvé sur le net
c-a-d un résumé des chapitres de mon rapport et la page correspondante..
mon problème c'est que je ne peut pas écrire directement le nom du chapitre ni la page vu qu'ils peuvent varier selon la requète du client.. je sais pas trop comment faire..
merci
Fred
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 15h12   #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
Tu peux m'expliquer pourquoi tu ne fais pas du LaTeX pour ton cas ?
__________________
__~{@ 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 05/01/2007, 15h40   #5
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Latex.. quelle est la différence entre celui-ci et un tool de report genre birt ou christal report? peut-on faire des graphiques (pie-chart...)?
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 15h53   #6
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
Beh disons que pour la rédaction de rapport, autant prendre un outil pour ca ou alors explique moi le problème en globalité pour clarifier ton problème.
__________________
__~{@ 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 05/01/2007, 16h03   #7
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Le projet consiste dans la génération d'extraits patrimoniaux automatisé, c-a-d représenter la fortune d'un client d'une banque. Bien entendu chaque client possède des biens différents (certains des obbligations, d'autres des actions, liquidité ecc ecc) ce qui fait que chaque rapport est différents (avec graphiques et table de données différents), mon idée est de construire des templates pour chaque représentation graphique d'un type de bien. Avec la requête je rassemble les templates nécessaires et crée un rapport (avec table des matières). BIRT avait l'air pas mal au début mais je viens de voir ses points faibles, notamment celui de la table des matières, en plus je viens de tomber sur un test des performances qui souligne les problèmes de dead-lock en cas de multiple requète de génération (en fin d'année une banque peut arriver à en faire 30'000 en moins de 10 heures...) et l'utilisation incroyable de la CPU... alors je sais plus trop vers quel outil me tourner... quelques idées?
merci
Fred
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 19h01   #8
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
Beh si t'es vraiment motivé Crystal Reports, mais ce n'est pas très utilisable à partir de Java peut être pour la prochaine version

Tu as peut être fait un état de l'art axé sur ton projet et oriente toi en fonction de celui ci et des tests que tu auras effectué.
__________________
__~{@ 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 16/02/2007, 20h25   #9
Invité de passage
 
Inscription : février 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 1
Points : 1
Points : 1
J'ai trouvé un site qui explique une technique pour faire une table des matières.

http://www.ml-crystal.com/articles/toc.htm

J'espère que ça te permettra de faire ce que tu as de besoin.

Simon Normand
simonnormand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2007, 10h46   #10
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Merci Simon,
malheureusement ce système a plusieurs points négatifs, dont celui de générer l'indice à la fin du rapport.. je suis en train de travailler dessus le problème et j'ai peut-être trouvé un moyen de générer un indice. si ça marche, j'expliquerai ma démarche.
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2007, 15h07   #11
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
Bon, j'ai trouvé un moyen de générer ce TOC, je me base sur la librairie iText 1.4.6, une fois le rapport générer:
quand j'appel cette méthode:

Code :
1
2
 
Map map = SimpleNamedDestination.getNamedDestination(reader, false);
elle me redonne cette map:
Citation:
__TOC_0 ==> 1 XYZ null 508.74 0
__TOC_6 ==> 28 XYZ null 509.24 0
__TOC_4 ==> 16 XYZ null 510.24 0
__TOC_2 ==> 4 XYZ null 509.24 0
__TOC_8 ==> 43 XYZ null 509.24 0
__TOC_10 ==> 46 XYZ null 507.24 0
__TOC_1 ==> 2 XYZ null 509.24 0
__TOC_5 ==> 27 XYZ null 509.24 0
__TOC_7 ==> 34 XYZ null 509.24 0
__TOC_3 ==> 8 XYZ null 509.24 0
sdfdsfdsfdsfdsf ==> 45 XYZ null 440.61 0
srfdsefgsdf ==> 45 XYZ null 508.74 0
le reader est le fichier PDF.
la key de la map sont les __TOC_xxx, le premier champ après le '==>' est le numéro de la page..
il ne reste plus qu'à insérer ces infos dans une page de votre rapport.
cerise sur le gateau: c'est rapide!
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2007, 15h55   #12
Invité de passage
 
Inscription : novembre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 2
Points : 2
Points : 2
Bonjour à tous.

FredKéKé,
Il semble que tu sois parvenu à faire ce que je cherche depuis plus d'une semaine !!!
Sauf que contrairement à toi, je ne suis pas un expert...
  • Pourrais-tu me dire où et comment tu places ces morceaux de codes dans ton rapport ?
    Citation:
    Envoyé par FredKéKé Voir le message
    Code :
    Map map = SimpleNamedDestination.getNamedDestination(reader, false);
    Citation:
    __TOC_0 ==> 1 XYZ null 508.74 0
    __TOC_6 ==> 28 XYZ null 509.24 0
    __TOC_4 ==> 16 XYZ null 510.24 0
    __TOC_2 ==> 4 XYZ null 509.24 0
    __TOC_8 ==> 43 XYZ null 509.24 0
    __TOC_10 ==> 46 XYZ null 507.24 0
    __TOC_1 ==> 2 XYZ null 509.24 0
    __TOC_5 ==> 27 XYZ null 509.24 0
    __TOC_7 ==> 34 XYZ null 509.24 0
    __TOC_3 ==> 8 XYZ null 509.24 0
    sdfdsfdsfdsfdsf ==> 45 XYZ null 440.61 0
    srfdsefgsdf ==> 45 XYZ null 508.74 0
  • Comment tu passes de la 'map' à une table des matières ?
  • Comment tu insères ta TOC dans ton rapport final ?
J'espère que je n'en demande pas trop...
Si c'est le cas, pouvez-vous me donner quelques liens, qui m'aiguillerons, svp ?

Merci.
Animal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 18h20   #13
Membre régulier
 
Inscription : novembre 2005
Messages : 173
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 173
Points : 84
Points : 84
hum.. c'est vieux tout ça et c'est surtout compliqué.. j'espère que tu n'as pas peur d'utiliser Java...

avant tout, regarde l'exemple en annexe:

[IMG][/IMG]

tu dois générer ton pdf .
l'index est généré comme un rptdesign normal mais il ne contient pas le numéros de page.

Ensuite avec iText, tu écris à la page 'x' les numéros de pages.
iText est capable de récupérer ces informations seulement si tu ajoute l'information de toc dans tes rptdesign (une quelquonque string va bien, l'important c'est de 'marquer' le toc).
voici ma classe:

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
 
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
 
import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.ColumnText;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.SimpleNamedDestination;
 
public class TocBuilder {
 
    protected Log logger = LogFactory.getLog(getClass());
 
    // to build TOC
    private int tocVerticalPosition = 0;
    private int tocVerticalDelta = 0;
    private int tocHorizontalPosition = 0;
    private int noTitlePage = 7;
 
    /**
     * Create the TOC
     *
     * @param urlPDF
     * @throws Exception
     */
    public void addToc(String path, int initialPage) {
 
        String tocName = "TOC_TEMP";
 
        try {
            if (logger.isDebugEnabled())
                logger.debug("Creating the TOC.....");
 
            // make a copy of the file
            FileUtils.copyFile(new File(path), new File(path+tocName));
 
            PdfReader r = new PdfReader(path+tocName);
            PdfStamper stp = new PdfStamper(r, new FileOutputStream(path));
 
            Map map = SimpleNamedDestination.getNamedDestination(r, false);
 
            List<Integer> pages = listTOC(map);
            Collections.sort(pages);
 
            // initial page
            int page = initialPage;
            int i = 1;
            // get the content of the initial page
            PdfContentByte cb = stp.getOverContent(page);
            for (Iterator iter = pages.iterator(); iter.hasNext();) {
                // if we reached the number of title for one page, we have to pass to the next page
                // and come back to the initial y position
                if (i == noTitlePage) {
                    cb = stp.getOverContent(++page);
                    i = 1;
                }
 
                // get the first token and insert the content into the phrase
                Phrase phrase = new Phrase(new StringTokenizer(iter.next().toString(), " ").nextToken(),
                        new Font(Font.HELVETICA, 8, Font.NORMAL));
 
                ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, phrase, tocHorizontalPosition,
                        tocVerticalPosition - (i++ * (tocVerticalDelta)), 0);
            }
 
            stp.close();
 
            // delete the copy
            FileUtils.forceDelete(new File(path+tocName));
 
            if (logger.isDebugEnabled())
                logger.debug("Done!");
        }
        catch (Exception e) {
            logger.error("Error while creating the TOC:", e);
 
            throw new Exception(e);
        }
    }
 
    /**
     * Transform a map of TOC into a list of page number
     *
     * @param map
     * @return
     */
    protected List<Integer> listTOC(Map map) {
 
        List<Integer> list = new ArrayList<Integer>();
 
        for (Object value : map.values())
            list.add(new Integer(new StringTokenizer(value.toString(), " ").nextToken()));
 
        return list;
    }
 
	public void setTocVerticalPosition(int tocVerticalPosition) {
		this.tocVerticalPosition = tocVerticalPosition;
	}
 
	public void setTocVerticalDelta(int tocVerticalDelta) {
		this.tocVerticalDelta = tocVerticalDelta;
	}
 
	public void setTocHorizontalPosition(int tocHorizontalPosition) {
		this.tocHorizontalPosition = tocHorizontalPosition;
	}
 
	public void setNoTitlePage(int noTitlePage) {
		this.noTitlePage = noTitlePage;
	}
 
}


il faut appeler la méthode tocBuilder, paramètres d'entrée:
- path, l'adresse de ton pdf.
- initial page, la page ou insérer les numéros de pages du toc.

ces paramètres sont les positions en pixels d'ou insérer les numéros de pages (petit rappel: itext part en bas à gauche):
tocVerticalPosition, la position verticale;
tocVerticalDelta, le delta vertical entre 2 numéros de pages;
tocHorizontalPosition, la position horizontale;
noTitlePage, le numéro de toc par page.

j'espère t'avoir aidé un peu..

a+
FredKéKé est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 19h48   #14
Invité de passage
 
Inscription : novembre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 2
Points : 2
Points : 2
J'ai peur que ce soit un peu chaud pour moi, mais je vais essayer, c'est de toutes façons la seule piste que j'ai.

En tous cas, merci à toi, d'avoir fait la démarche de fouiller au fond de tes archives pour m'aider. J'apprécie sincèrement...

Je vous tiens au courant...
Animal 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 19h26.


 
 
 
 
Partenaires

Hébergement Web