Как экспортировать несколько диаграмм asp.net в один документ PDF с помощью itextSharp?

Я хочу экспортировать две диаграммы Asp.net в один документ PDF с помощью iTextSharp.

Для одного графика я мог бы сделать это:

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();
}

НО, я не могу экспортировать две диаграммы одновременно...

У кого-то есть ответ? большое тебе спасибо...


person ista9im    schedule 03.03.2017    source источник
comment
Как насчет того, чтобы сделать то же самое для Chart2 до pdfDoc.Close(), как вы сделали для Chart1?   -  person mkl    schedule 03.03.2017
comment
Я уже сделал то же самое для Chart2, но в результате первый Chart1 дублируется дважды!   -  person ista9im    schedule 03.03.2017


Ответы (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:

введите здесь описание изображения

person kuujinbo    schedule 03.03.2017
comment
Ты прав. Я не очищаю MemoryStream! Большое спасибо. Теперь все в порядке. - person ista9im; 06.03.2017