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.3.2][Java1.5/ JSF 1.2] Exporter en pdf sur un clic


Sujet :

BIRT

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 20
    Points
    20
    Par défaut [2.3.2][Java1.5/ JSF 1.2] Exporter en pdf sur un clic
    Bonjour,

    Mon titre ne me semble pas clair a moi non plus.
    En fait, je voudrais sur un clique "lancer" birt pour un export en pdf et qu'il propose l'ouverture ou sauvegarde du fichier ... mais qu'il ne l'ouvre pas direct dans ma page web.

    Pour l'instant pour "lancer" birt, j'ai le code suivant mais ça ouvre directement le fichier dans ma page sans me demander mon avis.
    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
    <f:verbatim>
    	<birt:viewer
    			id			=	"viewer" 
    			reportDesign	=	"typeSociete.rptdesign"
    			isHostPage		=	"false"
    			svg			=	"true"
    			format		=	"pdf"
    			pageOverflow	=	"2"
    			height			=	"200"
    			width			=	"500"
    			showParameterPage="false"
    			locale			=	"fr_FR"
    			showToolBar	=	"false"
     
    			title			=	"monPDF Bordel"
    			style			=	"border:1px solid red"
    			>
    			<birt:param name="SOCI_ID" value="210"  />
    			<birt:param name="GROU_ID" value="0"  />
    			<birt:param name="TYPS_ID" value="0"  />
    			<birt:param name="AVIS_ID" value="0"  />
    	</birt:viewer>
    </f:verbatim>
    Merci d'avance pour votre aide
    Trycias

  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
    Bonjour,

    Je ne connaissais pas les balises pour BIRT jusqu'à hier (merci ) mais je suppose que ces balises appellent le viewer.

    Et le mot viewer veut bien dire visualisation !

    Déjà, il existe peut être une balise plus adaptée pour faire enregistrer le fichier et d'autre part ça dépend souvent de plusieurs choses.

    En général, quand on ouvre ou appelle un PDF dans un navigateur, ce n'est pas la page, mais le navigateur qui décide s'il va l'ouvrir dans le navigateur (s'il peut) et s'il ne peut pas le faire, il va alors demander si vous voulez l'enregistrer ou le voir dans l'application XXX.

    On peut peut-être jouer avec le type MIME pour demander un enregistrement mais je n'en suis pas convaincue.

    En tout cas, pour en revenir à la balise, pour votre cas, il ne faut pas l'utiliser (ou en tout cas pas celle-ci).

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 20
    Points
    20
    Par défaut aïe
    Allo,

    Merci pour ta réponse BIM.
    Si je comprend bien, il faudrait que depuis mon bean j'arrive a générer le rapport pdf et que j'en propose le chargement.
    Et là le souci n'est plus Birt, mais bien mes faibles connaissances en Java

    - Peut-on générer un rapport Birt depuis un bean java ?
    - Si oui, comment ?

    Merci d'avance pour votre aide

  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

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Si un navigateur web voit dans les entêtes HTTP cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Content-Disposition: attachment; filename="test.pdf"
    , il devrait demander d'enregistrer le fichier et ne l'ouvrira pas lui même.

  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
    Au temps pour moi

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 20
    Points
    20
    Par défaut Merci ...
    Merci ...
    J'arrive maintenant a générer le pdf ...
    reste plus qu'à faire en sorte que ma fonction appelle "d'elle même" le fichier pdf généré

    Mais peut on modifier les header d'un pdf généré par 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
    Ils ne sont pas protégés en écriture donc sûrement que oui. Mais comment ? Bonne question !

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    C'est plus une question de JSF non?
    Si t'as utilisé le code de BiM, Birt créé juste le PDF mais ne s'occupe pas (à juste titre) de la réponse HTTP.
    Par contre je connais rien à JSF, donc je peux pas t'aider :p.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Quoi-que google à bien marché : http://devpinoy.org/blogs/lamia/arch...am-in-jsf.aspx

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 32
    Points : 20
    Points
    20
    Par défaut Merci @ tous
    Merci @ tous

    ça marche parfaitement

    ceci dit, j'ai légerement modifier Edition.class
    afin de pouvoir récuperer le rapport sans avoir à l'enregistrer sur le serveur.
    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
    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
    package bean;
     
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.util.Locale;
    import java.util.Map;
     
    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 l'initialiser et la lancer.
     * Si nécessaire, cette classe peut être threadée facilement.
     * 
     * @author BiM
     *
     */
    public final class Edition {
     
    	private static Edition m_Instance = null;
    	private IReportEngine engine;
    	private String realPath;
    	private IRenderOption option;
    	private String etat;
    	private String chemin;
    	private Map<String, Object> parametres;
    	private String format;
    	private Locale langue;
    	private ByteArrayOutputStream baos;
     
    	/**
             * 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émarrer avec cette configuration.
             * @throws BirtException
             */
    	private Edition() throws BirtException {
    		EngineConfig config = new EngineConfig();
    		realPath = "C:\\Documents and Settings\\lpl\\workspace\\svnBaseCo\\WebContent\\";
    		config.setResourcePath(new File(realPath, "WEB-INF/classes/ressources").getAbsolutePath());
    		config.setBIRTHome(new File(realPath, "WEB-INF/ReportEngine").getAbsolutePath());	//endroit où se trouvent les librairies du Runtime
    		Platform.startup(config);
    		IReportEngineFactory factory = (IReportEngineFactory) Platform
    			.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
    		engine = factory.createReportEngine(config);
    		option = new RenderOption();
    	}
     
    	/**
             * Instanciation du service
             * @return l'instance en cours du service
             * @throws BirtException
             */
    	public static Edition getInstance() throws BirtException {
    		if (m_Instance == null) {
    			m_Instance = new Edition();
    		}
    		return m_Instance;
    	}
     
    	/**
             * Initialisation
             * @param etat nom du rptdesign
             * @param chemin chemin et nom du fichier de sortie
             * @param parametres paramètres à passer à l'état
             * @param format format de sortie (PDF, XLS, DOC, etc.)
             * @param langue langue de l'édition
             */
    	public void init(String etat, String chemin, Map<String, Object> parametres, String format, Locale langue) {
    		this.etat = etat;
    		this.chemin = chemin;
    		this.parametres = parametres;
    		this.format = format;
    		this.langue = langue;
    		baos = null;
    		baos = new ByteArrayOutputStream();
    	}
     
    	/**
             * Lancement de l'état
             */
    	public void run() {
    		try {
    			/* Récupération du rptDesign */
    			IReportRunnable design = engine.openReportDesign(new File(realPath, etat + ".rptdesign").getAbsolutePath());
     
    			/* Exécution */
    			IRunTask runTask = engine.createRunTask(design);
     
    			/* Paramètres */
    			runTask.setParameterValues(parametres);
     
    			/* Langue */
    			runTask.setLocale(langue);
     
    			runTask.run(chemin+".rptdocument");
     
    			/* Récupération du rptDocument */
    			IReportDocument doc = engine.openReportDocument(chemin+".rptdocument");
     
    			/* Rendu */
    			IRenderTask renderTask = engine.createRenderTask(doc);
     
    //			option.setOutputFileName(chemin);	//Nom du fichier de sortie
    			option.setOutputFormat(format);		//Format du fichier de sortie
    			option.setOutputStream(baos);
     
    			renderTask.setRenderOption(option);	//Chargement du fichier
     
    			renderTask.render();				//Création du fichier
    		}
    		catch (EngineException e) {
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * Permet de détruire le moteur. Cette fonction n'est
             * jamais utilisée mais pourrait l'être à l'avenir.
             */
    	public void destructeur() {
    		engine.destroy();
    	}
     
    	public ByteArrayOutputStream getBaos() {
    		return baos;
    	}
     
    	public void setBaos(ByteArrayOutputStream baos) {
    		this.baos = baos;
    	}
     
    }
    et pour le récuperer je fais juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			//n'instancie qu'une seule fois le moteur pour éviter les problèmes de mémoire
    			ed = Edition.getInstance();
    			//pour initialiser le service
    			ed.init("typeSociete", "C:\\mon_etat.pdf", maListeDeParametres,
    					RenderOption.OUTPUT_FORMAT_PDF, Locale.FRENCH);
    			//qui créera l'état dans le fichier mon_etat.pdf
    			ed.run();
    			ByteArrayOutputStream baos = ed.getBaos();

    voilà donc merci encore ...

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

Discussions similaires

  1. JSF vs Struts
    Par peuh dans le forum JSF
    Réponses: 22
    Dernier message: 06/04/2013, 22h49
  2. Réponses: 7
    Dernier message: 31/08/2009, 11h41
  3. Réponses: 14
    Dernier message: 08/06/2009, 16h37
  4. Réponses: 1
    Dernier message: 14/05/2009, 09h18
  5. [Plugin]Plugin JSF pour eclipe
    Par yanis97 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 07/07/2004, 14h50

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