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

2D Java Discussion :

[JFreeChart] Comment enregistrer plusieurs graphes dans un même fichier?


Sujet :

2D Java

  1. #1
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut [JFreeChart] Comment enregistrer plusieurs graphes dans un même fichier?
    bonjour
    je travail avec jfreechart pour génerer plusieurs graphs dans la méme page web,
    je veux enregistrer les graphs dans un fichier Pdf :

    pour un seul graphs :ya pas de probléme ,j'utilise saveChartAsPDF et ça marche
    pour plusieurs graphs:j'ai essayé de mettre mes graphs dans un meme jfreechart ,mais c'est toujours le dernier graph de la page web qui est enregistré dans le fichier Pdf...
    Savez vous comment enregistrer plusieurs graphs dans un méme fichier Pdf???
    Merci d'avance

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    En utilisant iText, voici un exemple pour afficher deux graphes dans un même fichier 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
    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
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.geom.Rectangle2D;
    import java.io.ByteArrayOutputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.jfree.chart.JFreeChart;
     
    import com.lowagie.text.Document;
    import com.lowagie.text.DocumentException;
    import com.lowagie.text.Font;
    import com.lowagie.text.FontFactory;
    import com.lowagie.text.Image;
    import com.lowagie.text.PageSize;
    import com.lowagie.text.pdf.DefaultFontMapper;
    import com.lowagie.text.pdf.PdfContentByte;
    import com.lowagie.text.pdf.PdfTemplate;
    import com.lowagie.text.pdf.PdfWriter;
     
    public class PdfAction extends Action 
    {
    	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, FileNotFoundException, DocumentException
    	{
     
    		ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); 
    		PdfWriter pdfWriter = null; 
     
    		Document document = new Document(); 
     
    		JFreeChart jfreechart = null ;
     
    		try
    		{
    			pdfWriter = PdfWriter.getInstance(document, baosPDF); 	           
    			document.setPageSize(PageSize.A4); 	
    			document.open();
     
    			Font fontTitre = FontFactory.getFont("Arial", 7, Font.NORMAL, Color.BLUE);		  		
    			Font font = FontFactory.getFont("Arial", 7, Font.NORMAL, Color.BLUE);
     
    			int width = 550;
    			int height = 300;
     
       	        PdfContentByte cb = pdfWriter.getDirectContent(); 
                PdfTemplate tp = cb.createTemplate(width, height); 
                Graphics2D g2 = tp.createGraphics(width, height, new DefaultFontMapper()); 
                Rectangle2D r2D = new Rectangle2D.Double(0.0D, 0.0D, width, height);	 	           
     
                jfreechart= // appel de la méthode permettant de récupérer le premier graphe ;
                jfreechart.draw(g2, r2D);
     
                g2.dispose(); 
                Image chartImage = Image.getInstance(tp); 	            
                document.add(chartImage);
     
                cb = pdfWriter.getDirectContent(); 
                tp = cb.createTemplate(width, height); 
                g2 = tp.createGraphics(width, height, new DefaultFontMapper()); 
                r2D = new Rectangle2D.Double(0.0D, 0.0D, width, height); 
     
                jfreechart= // appel de la méthode permettant de récupérer le deuxième graphe ;
                jfreechart.draw(g2, r2D);
     
                g2.dispose(); 
                chartImage = Image.getInstance(tp); 	            
                document.add(chartImage);	     
              } 
              catch(DocumentException e)
              {
              	baosPDF.reset(); 
              }
              finally 
    		  { 
              	if (document != null) 
              	{
              		document.close(); 
              	}
              	if (pdfWriter != null) 
              	{
              		pdfWriter.close(); 
              	}
    		  } 
     
              StringBuffer sbFilename = new StringBuffer() ;
              sbFilename.append("jfreechart_");
              sbFilename.append(System.currentTimeMillis());
              sbFilename.append(".pdf"); 
     
              StringBuffer sbContentDispValue = new StringBuffer();
              sbContentDispValue.append("inline");
              sbContentDispValue.append("; filename=");
              sbContentDispValue.append(sbFilename);
     
              response.setHeader("Content-disposition", sbContentDispValue.toString()); 
              response.setContentType("application/pdf"); 
              response.setContentLength(baosPDF.size()); 
     
              ServletOutputStream sos = response.getOutputStream(); 
              baosPDF.writeTo(sos); 
              sos.flush(); 
     
              return(mapping.findForward("success"));
    	} 
    }

  3. #3
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Merci C_nvy pour Ta Réponse
    STP pour:
    jfreechart= // appel de la méthode permettant de récupérer le premier graphe ;
    jfreechart.draw(g2, r2D);
    je n'ai pas bien compris ,Car dans mon code les graphs sont géneres de cette façon:
    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
     
     DefaultPieDataset defaultPieDataset = new DefaultPieDataset();
     	defaultPieDataset.setValue("produit1", 20);
     	defaultPieDataset.setValue("produit2", 10));
     	defaultPieDataset.setValue("produit3", 5);
     	defaultPieDataset.setValue("produit4", 30);
     	JFreeChart jfreechart = ChartFactory.createPieChart3D("Ventes ", defaultPieDataset, true, true, false);
     
    		PiePlot3D piePlot3d = (PiePlot3D)jfreechart.getPlot();
    		piePlot3d.setStartAngle(290D);
    		 piePlot3d.setDirection(Rotation.ANTICLOCKWISE);
    		//piePlot3d.setDirection(Rotation.CLOCKWISE);
    		//piePlot3d.setForegroundAlpha(0.5F);
    		 piePlot3d.setForegroundAlpha(0.60f);
    		 piePlot3d.setInteriorGap(0.33);
    		piePlot3d.setNoDataMessage("No data to display");
    		piePlot3d.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}"));
    		piePlot3d.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1} ({2})"));
     
    		TextTitle textTitle = jfreechart.getTitle() ;
    		textTitle.setFont(new Font("Arial", Font.BOLD, 15));
     
    		int largeur = 1000 ;
    		int hauteur = 300 ;
     
    		ChartRenderingInfo chartRenderingInfo = new ChartRenderingInfo(new StandardEntityCollection());
     
    		String filename = ServletUtilities.saveChartAsJPEG(jfreechart, largeur, hauteur, chartRenderingInfo, request.getSession());
     
    		Graphe graphe = this.initImage(request, chartRenderingInfo, filename);
     
    .........................
    Merci

  4. #4
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    ça correspond à l'instance de JFreeChart, soit celle que tu as appelé jfreechart dans ton code, la même que celle que tu passes à la méthode saveChartAsJPEG.

  5. #5
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    j'ai testé le code ,en remplacant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    jfreechart= // appel de la méthode permettant de récupérer le premier graphe ;
    jfreechart.draw(g2, r2D);
    par le code qui me permet de générer mon graphe (avec jfreechart comme Nom)et quand j'execute mon Action j'ai un Fichier Pdf Vide qui s'affiche??
    Savez vous quel est le Probléme?
    Merci Par Avance

  6. #6
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Peux-tu montrer le code de ton Action ?

  7. #7
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    J'ai repris le code fourni (j'ai just rajouté le code de géneration de jfreechart)

    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
    public class PdfAction extends Action 
    {
    	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception,IOException, ServletException, FileNotFoundException, DocumentException
    	{
     
    		ByteArrayOutputStream baosPDF = new ByteArrayOutputStream(); 
    		PdfWriter pdfWriter = null; 
     
    		Document document = new Document(); 
     
    		JFreeChart jfreechart = null ;
     
     
    try
    {
    //*************generation du Graphe****************
    TimeSeries series = new TimeSeries("ventes ", Month.class); 
    series.add(new Month(1, Integer.parseInt("2007")), 20); 
    series.add(new Month(2, Integer.parseInt("2007")), 10); 
    series.add(new Month(3, Integer.parseInt("2007")), 5);
    TimeSeriesCollection dataset = new TimeSeriesCollection(); 
    dataset.addSeries(series);
     jfreechart = ChartFactory.createTimeSeriesChart("Evolution des ventes annuelles", "Mois", "Montants DA", dataset, true, true, false);
    jfreechart.setBackgroundPaint(Color.white);    
    XYPlot xyplot = jfreechart.getXYPlot();		 
    DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis();
    dateaxis.setTickUnit(new DateTickUnit(1, 1, new SimpleDateFormat("MMM-yyyy")));
    dateaxis.setVerticalTickLabels(true);
    XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
    renderer.setBaseShapesVisible(true);
    renderer.setSeriesFillPaint(0, Color.red);
    renderer.setUseFillPaint(true);
    renderer.setToolTipGenerator(new StandardXYToolTipGenerator("{0} {1} {2}",new SimpleDateFormat("MMM-yyyy"),NumberFormat.getInstance()));
     
    //*********************************************
    pdfWriter = PdfWriter.getInstance(document, baosPDF); 	           
    document.setPageSize(PageSize.A4); 	
    document.open();
     
    Font fontTitre = FontFactory.getFont("Arial", 7, Font.NORMAL, Color.BLUE);		  		
    Font font = FontFactory.getFont("Arial", 7, Font.NORMAL, Color.BLUE);
     
    int width = 550;
    int height = 300;
     
    PdfContentByte cb = pdfWriter.getDirectContent(); 
    PdfTemplate tp = cb.createTemplate(width, height); 
    Graphics2D g2 = tp.createGraphics(width, height, new DefaultFontMapper()); 
    Rectangle2D r2D = new Rectangle2D.Double(0.0D, 0.0D, width, height); //  jfreechart= jfreechart.draw(g2, r2D);
     
    g2.dispose(); 
    Image chartImage = Image.getInstance(tp); 	            
    document.add(chartImage);
     
                cb = pdfWriter.getDirectContent(); 
                tp = cb.createTemplate(width, height); 
                g2 = tp.createGraphics(width, height, new DefaultFontMapper()); 
                r2D = new Rectangle2D.Double(0.0D, 0.0D, width, height); 
     
               // jfreechart= // appel de la méthode permettant de récupérer le deuxième graphe ;
               // jfreechart.draw(g2, r2D);
     
                g2.dispose(); 
                chartImage = Image.getInstance(tp); 	            
                document.add(chartImage);	     
              } 
              catch(DocumentException e)
              {
              	baosPDF.reset(); 
              }
              finally 
    		  { 
              	if (document != null) 
              	{
              		document.close(); 
              	}
              	if (pdfWriter != null) 
              	{
              		pdfWriter.close(); 
              	}
    		  } 
     
              StringBuffer sbFilename = new StringBuffer() ;
              sbFilename.append("jfreechart_");
              sbFilename.append(System.currentTimeMillis());
              sbFilename.append(".pdf"); 
     
              StringBuffer sbContentDispValue = new StringBuffer();
              sbContentDispValue.append("inline");
              sbContentDispValue.append("; filename=");
              sbContentDispValue.append(sbFilename);
     
              response.setHeader("Content-disposition", sbContentDispValue.toString()); 
              response.setContentType("application/pdf"); 
              response.setContentLength(baosPDF.size()); 
     
              ServletOutputStream sos = response.getOutputStream(); 
              baosPDF.writeTo(sos); 
              sos.flush(); 
     
              return(mapping.findForward("success"));
    	} 
    }

  8. #8
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    C'est normal que ça ne fonctionne pas.
    Tu as mis cette ligne en commentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jfreechart.draw(g2, r2D);
    Essaie en enlevant le commentaire.

    Sinon, petite remarque, il serait quand même plus propre d'externaliser le code de génération du graphe dans une classe à part plutôt que de tout mettre dans l'Action.

  9. #9
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    ça marche
    1000 Merci c_nvy pour l'Aide .........
    Effectivement t'as raison pour l'Organisation du code ,mais la c'est just un test aprés je doit tout organiser pour le rajouter dans mon Projet
    A++

  10. #10
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    De rien.
    Bon courage.

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

Discussions similaires

  1. [XHTML] comment déclarer plusieurs doctypes dans une même page
    Par elsapascal dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 21/06/2008, 11h20
  2. Réponses: 10
    Dernier message: 03/04/2008, 15h58
  3. Réponses: 4
    Dernier message: 21/11/2007, 12h19
  4. Réponses: 2
    Dernier message: 22/09/2007, 15h37
  5. Réponses: 24
    Dernier message: 21/06/2007, 15h15

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