2017-03-03 74 views
0

我想使用iTextSharp將兩個圖表Asp.net導出到單個文檔PDF。如何使用itextSharp將多個圖表asp.net導出到單個文檔PDF?

對於一個圖表,我能做到這一點:

Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f); 
PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
pdfDoc.Open(); 
using (MemoryStream stream = new MemoryStream()) 
{ 
    Chart1.SaveImage(stream, ChartImageFormat.Png); 
    iTextSharp.text.Image chartImage = iTextSharp.text.Image.GetInstance(stream.GetBuffer()); 
    chartImage.ScalePercent(75f); 
    pdfDoc.Add(chartImage); 
    pdfDoc.Close(); 

    Response.ContentType = "application/pdf"; 
    Response.AddHeader("content-disposition", "attachment;filename=Charts.pdf"); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Write(pdfDoc); 
    Response.End(); 
} 

,但我不能在同一時間導出兩個圖表...

有人有答案嗎?非常感謝你...

+0

如何做同樣的對於'pdfDoc.Close()'之前的'Chart2',就像你爲'Chart1'做的那樣? – mkl

+0

我已經爲Chart2做過同樣的事情,但他的結果是第一個Chart1被重複兩次! – ista9im

回答

1

也許你引用的是同一個圖表,或者沒有清理MemoryStream?這裏有一個簡單的例子,它生成兩個不同的圖表,然後將它們添加到Document

首先一個輔助方法生成一些樣本數據:

byte[] GetChartImage(params int[] points) 
{ 
    using (var stream = new MemoryStream()) 
    { 
     using (var chart = new Chart()) 
     { 
      chart.ChartAreas.Add(new ChartArea()); 
      Series s = new Series(); 
      for (int i = 0; i < points.Length; ++i) 
      { 
       s.Points.AddXY(points[i], points[i]); 
      } 
      chart.Series.Add(s); 
      chart.SaveImage(stream, ChartImageFormat.Png); 
     } 
     return stream.ToArray(); 
    } 
} 

然後添加圖表:

Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=charts.pdf"); 
using (Document document = new Document()) 
{ 
    PdfWriter.GetInstance(document, Response.OutputStream); 
    document.Open(); 
    document.Add(Image.GetInstance(GetChartImage(3, 5, 7))); 
    document.Add(Image.GetInstance(GetChartImage(2, 4, 6, 8))); 
} 
Response.End(); 

的PDF輸出:

enter image description here

+0

你是對的。我沒有清理MemoryStream!非常感謝你。現在好了。 – ista9im

相關問題