2017-03-03 3 views
0

iTextSharp를 사용하여 두 개의 Charts 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

어떻게 같은 일에 대한 'Chart1'에서했던 것처럼 'pdfDoc.Close()'이전의'Chart2'에 대해? – 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