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 :

Créer une classe java pour automatiser la génération [FAQ]


Sujet :

BIRT

  1. #1
    Membre du Club Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 63
    Points
    63
    Par défaut Créer une classe java pour automatiser la génération.
    Bonjour,

    J'ai créé la classe suivante à partir du code que tu as fourni BiM.
    Cependant j'ai l'erreur suivante:
    The type org.eclipse.birt.core.exception.BirtException cannot be resolved. It is indirectly referenced from required .class files BirtReportGenerator/Execution Execution.java line 0 1169543455724 4391
    J'ai téléchargé et décompressé BIRT runtime et inclu les librairies suivantes:
    -chartengineapi.jar
    -engienapi.jar


    Code java : 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
    package Execution;
     
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.ReportEngine;
    import org.eclipse.birt.report.engine.api.RenderOptionBase;
    import org.eclipse.birt.report.engine.api.EngineException;
     
    public class Execution {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		/* Partie initialisation */
    		EngineConfig engineConfig = new EngineConfig();
    		engineConfig.setEngineHome("Chemin A");
    		ReportEngine engine = new ReportEngine(engineConfig);
    		IReportRunnable design = null;
    		RenderOptionBase option = new RenderOptionBase();
    		option.setOutputFormat(RenderOptionBase.OUTPUT_FORMAT_PDF);	//Format du fichier de sortie
    		/* Fin initialisation */
     
    		/* Préparation de l'édition */
    		try {
    			design = engine.openReportDesign("Chemin B");
    		} catch (EngineException e) {
    			e.printStackTrace();
    		}
    		IRunAndRenderTask task = engine.createRunAndRenderTask(design);
    		/* Fin de la préparation */
     
    		/* Création PDF */
    		option.setOutputFileName("Chemin C");	//Nom du fichier de sortie
    		task.setRenderOption(option);		//Chargement du fichier
    		/* Fin création PDF */
    		task.run();					//Déclenchement de l'édition
    		//Chemin A ="C:/birt-runtime-2_0_1/Report Engine";
    	}
     
    }

    Une idée sur l'origine du problème?

  2. #2
    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
    Tu cherches où se trouve cette classe, il s'avère que c'est dans coreapi.jar.

  3. #3
    Membre du Club Avatar de lunart
    Homme Profil pro
    Administrateur système et réseau
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur système et réseau

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 63
    Points
    63
    Par défaut
    Merci pour l'info

    Sinon il me semble que sur la fin du code il faille rajouter un try catch comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /* Fin création PDF */
    		try {
    			task.run();
    		} catch (EngineException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}

  4. #4
    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
    Exact, enfin, si tu ajoutes des paramètres à ton édition, je crois qu'il faut même faire un catch un peu plus grand. Dans ma fonction run() de EditionPDF (la classe singleton d'instanciation du ReportEngine), j'ai mis un try catch sur l'ensemble des instructions.

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Peut on déployer ce genre de classe sur un serveur ? (Tomcat,Jboss ou autre ...)

  6. #6
    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
    Bien sûr ! Mais au lieu de faire un main, tu crées un singleton :
    Code java : 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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    package edition;
     
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Locale;
     
    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.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.RenderOptionBase;
    import org.eclipse.birt.report.engine.api.ReportEngine;
     
    public class EditionPDF {
     
    	private static EditionPDF m_Instance = null;
    	private IReportEngine engine;
    	private String realPath;
    	private RenderOptionBase option;
    	private String etat;
    	private String chemin;
    	private ArrayList parametres;
    	private Locale locale;
     
    	private EditionPDF() throws BirtException
    	{
    		EngineConfig config = new EngineConfig();
    		realPath = "C:\\Tomcat\\";
    		config.setResourcePath(new File(realPath, "WEB-INF/classes/ressources").getAbsolutePath());
    		config.setEngineHome(new File(realPath, "WEB-INF/ReportEngine").getAbsolutePath());	//endroit où se trouvent les librairies du Runtime
    //		config.setLogConfig(new File("C:\\Temp", Level.OFF);
    		Platform.startup(config);
    		IReportEngineFactory factory = (IReportEngineFactory) Platform
    			.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
    		engine = factory.createReportEngine( config );
    		engine = new ReportEngine(config);		//engine permet de connaitre et de modifie le fichier .rptdesign
    		option = new RenderOptionBase();
    		option.setOutputFormat(RenderOptionBase.OUTPUT_FORMAT_PDF);	//Format du fichier de sortie
    	}
     
    	public static EditionPDF getInstance() throws BirtException
    	{
    		if (m_Instance == null)
    			m_Instance = new EditionPDF();
    		return m_Instance;
    	}
     
    	public void init(String etat, String chemin, ArrayList parametres)
    	{
    		this.etat = etat;
    		this.chemin = chemin;
    		this.parametres = parametres;
    	}
     
    	public void run()
    	{
    		try
    		{
    			IReportRunnable design = engine.openReportDesign(new File(realPath, "WEB-INF/etats/" + etat + ".rptdesign").getAbsolutePath());
    			IRunAndRenderTask task = engine.createRunAndRenderTask(design);		//Crée une tâche afin d'éxécuter le rapport
    			/* Passage des paramètres s'il y en a : task.setParameterValue(...); */
    			/* Création PDF */
    			option.setOutputFileName(chemin);	//Nom du fichier de sortie
    			task.setLocale(Locale.FRENCH);
    			task.setRenderOption(option);		//Chargement du fichier
    			/* Fin création PDF */
    			task.run();							//Création du fichier
    		}
    		catch (EngineException e)
    		{
    			trace.logError(e);
    		}
    	}
     
    	public void destructeur()
    	{
    		engine.destroy();
    	}
     
    }

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Exscuse moi de demander quelques petites précisions
    Mais à vrai dire j'ai pas trop l'habitude des serveurs j2ee

    Donc ton singleton, tu va l'utiliser dans une servlet ?
    Il faut installer le report engine sur le serveur ?

    Avec cette méthode on utilisira plus le viewer de Birt ?

  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
    Citation Envoyé par 6sous
    Salut,
    Bonjour,

    Citation Envoyé par 6sous
    Exscuse moi de demander quelques petites précisions
    Mais à vrai dire j'ai pas trop l'habitude des serveurs j2ee
    Ok, mais tu n'as pas besoin de t'excuser, je suis là pour aider.

    Citation Envoyé par 6sous
    Donc ton singleton, tu va l'utiliser dans une servlet ?
    Dans mon cas, oui !

    Citation Envoyé par 6sous
    Il faut installer le report engine sur le serveur ?
    Dans le cas où le singleton est éxécuté côté serveur, tout doit se trouver sur le serveur.

    Citation Envoyé par 6sous
    Avec cette méthode on utilisira plus le viewer de Birt ?
    Et non !

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    ok merci c'est cool

    Et pour que ton client recupere le fichier pdf créer tu fait comment ?

  10. #10
    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
    Citation Envoyé par 6sous
    ok merci c'est cool

    Et pour que ton client recupere le fichier pdf créer tu fait comment ?
    De rien

    Je renvoie le fichier au client (comme je renverrai une JSP) et je l'affiche. Il s'ouvre dans son lecteur PDF par défaut. Il peut l'imprimer et/ou l'enregistrer à partir de Acrobat Reader (ou autre lecteur de PDF).

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Et est ce qu'elle est open source cette super servlet ?

    Moi j'arrive à ouvrir le pdf mais avec un exec et le chemin d'adobe reader en dur donc c'est tout pourri.
    Faut que je me mette serieusement au servlet.

  12. #12
    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
    Je te l'ai donnée la servlet lol, je vois pas quoi te donner de plus. Tu devrais peut-être te pencher sur des tutoriels J2EE.

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Oui merci t'a raison

    J'ai reflechi un peu et j'ai cherché le pti bout de code pour envoyer un fichier pdf
    et ca marche.

    merci pour tout

  14. #14
    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
    Citation Envoyé par 6sous
    Oui merci t'a raison

    J'ai reflechi un peu et j'ai cherché le pti bout de code pour envoyer un fichier pdf
    et ca marche.

    merci pour tout
    De rien

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Dans le singleton, au lieu de créer un fichier PDF
    on peut récupérer un flux.

    en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    option.setOutputStream(flux); //flux est de Type OutputStream
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    option.setOutputFileName(chemin);
    et aprés dans flux on a un flux d'octet correspondant à notre fichier PDF ou HTML qu'on peut directement rebalancer au client.

    Ca évite de créer des fichiers sur le serveur. C'est super.

    du coté de l'appel en changeant le deuxième parametre par un OutputStream on a ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ByteArrayOutputStream flux = new ByteArrayOutputStream();
    edition = EditionPDF.getInstance();
    edition.init("nomdufichierrptdesign", flux, (ArrayList)parametres);
    edition.run();
    Et on récupére dans flux un flux d'octet de notre rapport générer en pdf ou html.

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

Discussions similaires

  1. Créer une interface JAVA pour un programme non JAVA
    Par alieonor dans le forum Débuter
    Réponses: 8
    Dernier message: 11/09/2008, 15h34
  2. Réponses: 1
    Dernier message: 26/08/2008, 12h27
  3. [C#2005] Créer une classe Connexion pour Business Objects
    Par Herlece dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/08/2008, 23h16
  4. Réponses: 9
    Dernier message: 25/06/2008, 16h42
  5. Créer une classe .java avec un code java
    Par demcoul dans le forum Langage
    Réponses: 10
    Dernier message: 03/01/2008, 00h06

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