2017-03-03 83 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

相关问题