IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BIRT Discussion :

[2.6.1] Intégrer et exporter un rapport BIRT dans un Projet Java


Sujet :

BIRT

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 25
    Points
    25
    Par défaut [2.6.1] Intégrer et exporter un rapport BIRT dans un Projet Java
    BIM BIM BIM !!

    il n'y a que vous qui pouvez m'aider,
    la je suis sensé m'adresser à la reine du BI, donc si vous n'avez pas pu m'aider, alors la je suis vraiment mal, j'ai fait le tour de tous les tuto, j'ai même parfois repris bêtement le code tel qu'il est pour que ça marche mais walou !!
    portant le but est très simple comme j'ai écrit dans le titre o_O
    j'ai créé un joli rapport sous BIRT, avec des graphes et des tableaux, les données sont récupérées à partir d'un serveur SQL, la connexion marche nickel, la génération en HTML est très bien, je peux du coup l'enregistrer sous format pdf.

    ce que je veux alors, Miss BIM c'est de pouvoir lancer ce rapport .rptdesign et l'exporter automatiquement chaque lundi matin par exemple, le fichier pdf doir etre archivé quelque part.

    bref, voici mon code, c'est presque le même dans tous les tuto mais j'arrive pas à le faire fonctionner (juste ouverture et export du rapport) :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import java.util.logging.Level;
    import org.eclipse.birt.core.framework.Platform;
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.EngineConstants;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IRenderOption;
    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.IRunAndRenderTask;
    import org.eclipse.birt.report.engine.api.RenderOption;
    import org.eclipse.birt.report.engine.api.impl.RunAndRenderTask;
     
    /**
    * Simple BIRT Design Engine API (DEAPI) demo.
    */
     
    public class ExecuteReport
    {
     
    public static void main( String[] args ) throws EngineException
    {
        EngineConfig config = new EngineConfig();
        IReportEngine engine = null ;
     
        try{
            config.setBIRTHome( "D:\\Eclipse\\Eclipse_BIRT\\birt-runtime-2_6_1\\ReportEngine" );
            config.setLogConfig("c:/birt", Level.FINE);
            System.out.println("1");
     
            Platform.startup( config ); 
            IReportEngineFactory factory = (IReportEngineFactory) Platform
                    .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
            System.out.println("2");
         engine = factory.createReportEngine( config );
            System.out.println("3");
            engine.changeLogLevel( Level.WARNING );
            System.out.println("4");
     
        }
        catch( Exception ex)
        {
            System.out.println("catch");
        }    
     
        System.out.println("5");
     
        //Open the report design
        IReportRunnable design = engine.openReportDesign("D:\\Eclipse\\Eclipse_BIRT\\workspace\\BIRT_Report\\AlarmReport.rptdesign"); 
        System.out.println("6");
     
     
        //Create task to run and render the report,
        IRunAndRenderTask task = engine.createRunAndRenderTask(design); 
        //Set parent classloader for engine
        task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, RunAndRenderTask.class.getClassLoader()); 
     
        //Set parameter values and validate
        //task.setParameterValue("Top Percentage", (new Integer(3)));;
        //task.setParameterValue("Top Count", (new Integer(5)));
        //task.validateParameters();
     
        //Save as PDF File
        IRenderOption options = new RenderOption();        
        options.setOutputFormat("pdf");
        options.setOutputFileName("c:/birt/resultat.pdf");
     
        task.setRenderOption(options);
     
        //run and render report
        task.run();
        task.close();
     
    }
    }
    et voici l'erreur :

    1
    2
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/CoreException
    at org.eclipse.birt.report.engine.api.impl.ReportEngine.<init>(ReportEngine.java:110)
    at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory$1.run(ReportEngineFactory.java:18)
    at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory$1.run(ReportEngineFactory.java:1)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.eclipse.birt.report.engine.api.impl.ReportEngineFactory.createReportEngine(ReportEngineFactory.java:14)
    at sql.birt.connexion.ExecuteReport.main(ExecuteReport.java:40)
    Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.CoreException
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 6 more
    comme vous voyez, il affiche 1 et 2 et s'arrête au niveau de
    engine = factory.createReportEngine( config );

    il ne trouve pas la classe org/eclipse/core/runtime/CoreException
    portant j'ai bien ajouté le org.eclipse.core.runtime.jar

    effectivement le .jar que j'ai ajouté ne contient pas cette classe mais je n'arrive pas à la trouver ailleurs, savez vous comment le télécharger ce org.eclipse.core.runtime.jar svp ?

    pouvez vous me filer juste un petit bout de code qui crée un ReportEngine ?

    excusez moi si c'était long mais j'ai voulu bien expliquer mon problème pour gagner du temps.

    versions :
    Latest BIRT Report Designer Release Build: 2.6.1 ( All in One )
    Latest BIRT Runtime Release Build: 2.6.1

    si vous avez vu des erreurs dans mon code merci bien de me les noter

    Merci Infiniment d'avance BIM pour ta réponse, et si quelqu'un d'autre peux m'aider ça sera très gentil de sa part.

    Cordialement

    MRB

  2. #2
    Membre du Club
    Profil pro
    dqqds
    Inscrit en
    Août 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : dqqds
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 14
    Points : 69
    Points
    69
    Par défaut
    EDIT

    Finalement, je vois une différence,
    essaye de remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setBirthome(...);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setEngineHome(...);
    FIN EDIT

    Salut Rammazotti,
    normalement, les jars devant être rajoutés à ton application sont ceux situés dans le répertoire <ReportEngine>/lib.
    D'autres jars sont présents dans le répertoire plugins (dont celui que tu cherches org.eclipse.core.runtime_xxx.jar) mais nul besoin de les rajouter car l'engine les trouve tout seul (normalement ^^).

    Ton installation du runtime est-elle correcte ? Contient-elle toujours le répertoire plugins ?

    Je ne te file pas mon code, il me semble identique.

    ++
    Nicolas

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    J'ai récemment réalisé un programme java faisant ce que tu souhaites.
    Mais avant toute chose, Miaou a raison :
    Citation Envoyé par miaou_
    Finalement, je vois une différence,
    essaye de remplacer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setBirthome(...);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.setEngineHome(...);
    Mon appli gère donc des taches CRON (Basé sur Quartz), elle s'appuie sur un ou plusieurs designs, les fusionne en un seul PDF (si nécessaire ) et envoi le tout par mail (Apache Commons Email ) à une liste de destinataire.
    Je ne te mettrai pas mon programme sur le forum (trop lourd, long, ...) mais je peux bien évidement t'aider sur tel ou tel étape.
    N'hésites pas!

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Nicolas, tu assure mon pot, pourtant je l'ai déja fait, et avant c'était setEngineHome et non pas setBirtHome, car dans d'autre forum, ils préféraient ça, mais bon, la ça marche, merci
    mais le soucis n'était pas seulement ça, car j'ai viré tout mes JARs et je n'ai importé que ceux du ReportEngine, je confirme ce que t'as dit, c'est le moteur qui les cherche, sinon, si on importe chaque JAR à part, ça embourbe la création du moteur.
    Merci encore une fois Niko

    theazyfa, l'histoire des mails m’intéresse beaucoup, d'ailleurs c'est logiquement la suite de mon appli
    en fait, je dois créer 5 rapport, un pour chaque batiment (c'est une usine), on doit reporter toutes les alarmes du mois dernier ou de la semaine dernière, si je peux donc les coller, ces 5 rapports (5 rptdesign) et les exporter dans un seul fichier PDF et ensuite les envoyer par mail (j utilise déja un serveur Apache pour la visualisation des rapport sur internet) ça sera génial
    peux tu me dire comment les coller et les envoyer STP
    Merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bien sur que je vais te le dire!
    et avec un plaisir non dissimulé car...
    Pour une fois, c'est moi qui aide

    Bon j'ai pas beaucoup de mérite... juste eu beaucoup de temps pour chercher (le dite pas a mes boss....)

    je suis d'abord tomber sur cet excellent article pour combiner 2 rapports PDF en un seul.
    Combine multiple birt to generate single report

    Pour faire un résumé,
    en gros tu génères tes rapports sous forme de OutputStream.
    pour se faire, il faut fournir dans les options un outputStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //Création des options
    IRenderOption  options = new PDFRenderOption();
    /Définir son format de sortie
    options.setOutputFormat("pdf");
     
    //Création du OutputStream pour récupérer le rapport généré
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    //Ajouter aux options
    options.setOutputStream(byteArrayOutputStream);
     
    //Et ajouter le tout à ta tache
    task.setRenderOption(options);
    //et faire tourner la moulinette
    task.run();
    task.close();
    Après tu gardes précieusement tes outputStream pour ensuite les combiner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    List<PdfReader> pdfReaders = new ArrayList<PdfReader>();
    PdfCopyFields pdfCopyFields = new PdfCopyFields(new FileOutputStream(DESTINATION_FILE_PATH + System.getProperty("file.separator") + outputName));
    for (ByteArrayOutputStream byteArrayOutputStream : byteArrayOutputStreams) {
      PdfReader pdfReader = new PdfReader(byteArrayOutputStream.toByteArray());
      pdfReaders.add(pdfReader);
    }
     
    for (PdfReader pdfReader : pdfReaders) {
      pdfCopyFields.addDocument(pdfReader);
    }
    pdfCopyFields.close();
    Et hop!
    tu as un joli rapport combinant tes designs !!!

    Pour la partie Mail, j'ai utilisé Apache Mail.
    Ca ne devrait pas te poser de soucis SAUF peut être attacher le pdf au mail.

    Pour ma part j'ai pris le partie de générer le rapport et de le déposer sur le disque ( ca me permet de vérifier ) et ensuite d'associer le pdf au mail avant de l'envoyer.

    Donc voici un petit bout de la partie Mail où j'associe le fichier PDF au mail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MimeBodyPart mbpdf = new MimeBodyPart();
    //Génerer un tableau de Byte du fichier PDF
    byte[] pdfData = this.convertDocToByteArray(<chemin/du/fichier/pdf>);
    mbpdf.setDataHandler(new DataHandler(new ByteArrayDataSource(pdfData, "application/pdf")));
    mbpdf.setFileName(<nomDu.pdf>);
    //après on crée un mail multi partie
    Multipart mp = new MimeMultipart();
    //et on ajoute le pdf , pense a créer une partie pour ajouter un texte au mail ou autre...
    mp.addBodyPart(mbpdf);
    La fameuse méthode qui génère ton tableau de byte a partir de ton pdf :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private byte[] convertDocToByteArray(String sourcePath) {
     
    byte[] byteArray = null;
    try {
      InputStream inputStream = new FileInputStream(sourcePath);
      byteArray = new byte[inputStream.available()];
      inputStream.read(byteArray);
      inputStream.close();
      } catch (FileNotFoundException e) {
       //Fichier pdf non trouvée
      } catch (IOException e) {
      //La, c'est la loose...
      }
    return byteArray;
    }
    Et voila, normalement t'as un programme qui génère plusieurs designs, qui les combine en un seul PDF et qui envoi le tout par mail.
    Bien entendu, il manque pas mal de chose dans la partie mail notamment mais le reste n'est que détail dépendant de tes envies !

    L'étape suivante est de faire un Cron (je pense ) histoire que tout ca se fasse tout seul, de facon périodique et sans que tu y penses!
    Pour ca, je me suis appuyé sur Quartz mais ca, ca sera pour la prochaine fois !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 25
    Points
    25
    Par défaut Merci
    THEAZYFA ... t'es mon sauveur
    c'est exactement ce qu'il me faut, le tout dans un seul rapport, c'est tout simplement M O R T E L je peux même négocier une augmentation graçe à ça
    la je vais faire en sorte que ça sera envoyé périodiquement, chaque début de semaine, je vais voir le lien sur le Quartz que tu m'a envoyé.
    les mails j'en ai déjà envoyé quelques uns avant donc j'ai pas eu de soucis
    mais tu m'as beaucoup aidé, MERCI !!
    Je te doit un coup de main, donc n'hésite pas de le dire en cas de besoin, je peux aider aussi, parfois

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Rammazotti
    je peux même négocier une augmentation graçe à ça
    j'prends 10%

    sinon pour Quartz, pense a faire des jobStateful ( pour éviter qu'il se déclenche si l'ancien job n'est pas fini ^^ et pense a mettre un pool supérieur à 1)
    car crois moi... une fois que tes boss auront vu le rapport...
    vont t'en demander plein!
    sinon....
    A TON SERVICE!

  8. #8
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    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 796
    Points : 10 765
    Points
    10 765
    Par défaut
    (J'adore me faire remercier dans une discussion à laquelle je n'ai pas répondu (ni lue d'ailleurs), ça prouve au moins que d'autres personnes participent )

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 32
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par BiM Voir le message
    (J'adore me faire remercier dans une discussion à laquelle je n'ai pas répondu (ni lue d'ailleurs), ça prouve au moins que d'autres personnes participent )
    En effet, ma chère demoiselle
    s'il y a des gens qui aident ds ce forum, c'est en grande partie grâce à toi (attention, je ne suis pas entrain de draguer là ) car on a presque tous commencé par un de tes tutos, donc un petit remerciement de temps en temps ça ne nous fait rien mais ça fera plaisir à la reine du BI (sur ce site au moins )
    t'éloigne pas trop, j'aurai peu être besoin de toi prochainement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Export .xsl rapport Birt Designer via code Java
    Par inconnu00 dans le forum BIRT
    Réponses: 2
    Dernier message: 28/05/2013, 11h19
  2. Réponses: 7
    Dernier message: 06/09/2011, 14h11
  3. générer son rapport .rptdesign dans un projet Java
    Par dollark1K dans le forum BIRT
    Réponses: 8
    Dernier message: 02/06/2009, 11h40
  4. Afficher un rapport Birt dans un programme java
    Par Versace31 dans le forum Documents
    Réponses: 1
    Dernier message: 28/03/2009, 17h55
  5. Exporter un rapport Webi dans un powerpoint
    Par Meryll dans le forum Webi
    Réponses: 3
    Dernier message: 31/10/2008, 14h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo