【问题标题】:How to export multiple charts asp.net to a single document PDF using itextSharp?如何使用 itextSharp 将多个图表 asp.net 导出到单个文档 PDF?
【发布时间】:2017-03-03 11:28:26
【问题描述】:

我想使用 iTextSharp 将两个 Charts 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();
}

但是,我不能同时导出两个图表...

有人有答案吗?非常感谢...

【问题讨论】:

  • pdfDoc.Close() 之前对Chart2 做同样的事情怎么样?就像对Chart1 做的那样?
  • 我已经对 Chart2 做了同样的事情,但他的结果是第一个 Chart1 被复制了两次!

标签: c# asp.net itext asp.net-charts


【解决方案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 输出:

【讨论】:

  • 你是对的。我没有清理 MemoryStream !非常感谢你。现在好了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
相关资源
最近更新 更多