将ASP.NET图表保存为PDF

时间:2013-09-16 13:23:18

标签: c# asp.net pdf

我尝试将图像从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=Chart.pdf");
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Write(pdfDoc);
    Response.End();
}

但是当我运行此代码时没有任何反应(带有问题的窗口将不会出现保存PDF的内容)。

在web.config中我有这个:

<add key="ChartImageHandler" value="storage=session;timeout=360;" />

我无法使用已定义的文件路径保存文件。

请帮助:)

2 个答案:

答案 0 :(得分:0)

尝试使用以下代码替换代码 -

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.Clear();
        Response.AppendHeader("content-disposition", "attachment;filename=Chart.pdf");
        Response.ContentType = "application/pdf";
        Response.WriteFile(pdfDoc);
        Response.Flush();
        Response.End();
} 

另外,我发现pdfDoc.Close();这一行。是否真的有必要关闭它。(如果没有必要,请尝试删除它)

答案 1 :(得分:0)

替换你的这一行

PdfWriter.GetInstance(pdfDoc, Response.OutputStream);

System.IO.MemoryStream msReport = new System.IO.MemoryStream();
iTextSharp.text.pdf.PdfWriter.GetInstance(pdfDoc, msReport);

Response.Write(pdfDoc);

Response.BinaryWrite(msReport.ToArray());

希望这能解决你的问题