2012-09-15 5 views
0

Mon exigence est de mettre généré de la carte par JFreeChart à mon document PDFréponse ne peut pas être réglé sur la fixation en utilisant jfree et itext ensemble

Pour afficher la liste des cartes, je suis obtenir la liste des objets BufferedImage

private BufferedImage generateChartForPDF (DefaultCategoryDataset dataset,String threadName) { 
     String title = "Skill : "+threadName ; 

     JFreeChart chart = ChartFactory.createBarChart(title, "Work Completion", 
       "Perce %", dataset, PlotOrientation.VERTICAL, true, true, 
       false); 

     return chart.createBufferedImage(500, 300) ; 
    } 

a partir de ce que je remplirai une liste d'images en mémoire tampon et je remplissais le tableau au format PDF de manière ci-dessous

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
Document pdfDocument = new Document(); 
PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, baos); 
setGraphImagesInPDF(pdfDocument, buffImageList) ; 
private void setGraphImagesInPDF (Document pdfDocument,List<BufferedImage> buffImageList) throws DocumentException, IOException { 
     for (BufferedImage bufferedImage : buffImageList) { 
      Image image = Image.getInstance(bufferedImage,Color.LIGHT_GRAY); 
      pdfDocument.newPage(); 
      image.setAbsolutePosition(300, 300) ; 
      pdfDocument.add(image); 
     } 
    } 

Voici comment je remplir le tableau dans mon PDF. Maintenant, quand je mis la disposition de contenu à l'attachement, je ne reçois pas la réponse en pièce jointe dans mon interface utilisateur plutôt le navigateur ouvre le PDF dans une autre page

ServletOutputStream outputStream = response.getOutputStream(); 
baos.writeTo(outputStream); 
setResponseHeaders(response,"Data"); 
outputStream.flush(); 
outputStream.close(); 

private void setResponseHeaders(HttpServletResponse response,String reportingType) { 
     System.out.println("setting response headers .. "); 
     response.setHeader("Content-Disposition", 
       "attachment; filename=\""+reportingType+" Reports.pdf\""); 
     response.setContentType("application/pdf"); 
    } 

Même si je place le type dispostion de contenu à l'attachement dans l'en-tête de la réponse, cela ne s'ouvre pas en pièce jointe. La même chose fonctionne bien après avoir enlevé la partie graphique du code. Aidez-moi s'il vous plaît à ce sujet. Merci

+0

(1) pourquoi cette question marquée itext/jfreechart. Cette question concerne l'en-tête de réponse, n'est-ce pas? Ce n'est pas grave si vous utilisez iText ou JFreeChart. (2) Pouvez-vous reproduire le problème sur différentes machines, en utilisant différents navigateurs? Ma conjecture est que vous avez un problème de configuration locale qui n'est pas reproductible sur chaque machine client. –

Répondre

2

Selon le commentaire de Bruno, n'est pas une question iText/JFreechart, plutôt une question servlet/http.

Vous devez définir les en-têtes de réponse avant vous obtenez le flux de sortie: c'est obligatoire. Je vous suggère de définir aussi l'en-tête content-length dans setResponseHeaders méthode, comme ceci:

response.setContentLength(baos.size()); 

Ainsi, votre code doit être:

setResponseHeaders(response, baos, "Data"); 
ServletOutputStream outputStream = response.getOutputStream(); 
baos.writeTo(outputStream); 
outputStream.flush(); 
outputStream.close(); 
+0

Parfait !! Ça a marché !! :-) "En-têtes d'abord, en écrivant ensuite" :-) – Arun

Questions connexes