ASP.NET:使用“另存为”下载PowerPoint文件

时间:2010-09-22 11:49:52

标签: asp.net powerpoint openxml-sdk

我正在使用this作为参考生成PowerPoint文件。用户可以基于许多标准搜索其他用户。基于用户的信息保存在PowerPoint文件中。但是我无法在服务器上保存所有PowerPoint文件。

因此,用户需要右键单击链接,选择“另存为...”,然后在本地保存文件。

服务器上不应保存任何内容。我一直在谷歌搜索,但我不知道该找什么。你能指出一个好的教程吗?

我似乎是一个糟糕的Google员工。我从搜索字符串中删除了“powerpoint”,并且有大量的点击。但是,仍然赞赏任何评论。

1 个答案:

答案 0 :(得分:2)

您应该将文件作为流获取,使用open xml sdk打开它(您需要使用Open XML SDK:here)。

如果您不熟悉Open XML SDK,您还可以查看博客文章here,该文章也取自您已经引用的博客。

下面的代码是一个示例代码,用于创建报表并使用Open XML SDK with ASP.NET发送到客户端。我希望它会有所帮助。

public void SendReport()
{
    using (Stream stream = GetReportStream())
    {
        stream.Position = 0;
        byte[] buffer = new byte[(int)stream.Length];
        stream.Read(buffer, 0, (int)stream.Length);
        System.Web.HttpContext.Current.Response.Clear();
        System.Web.HttpContext.Current.Response.Buffer = true;
        System.Web.HttpContext.Current.Response.AddHeader("Content-Type", "application/pptx");
        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=Report;");

        System.Web.HttpContext.Current.Response.BinaryWrite(buffer);
        System.Web.HttpContext.Current.Response.Flush();
        System.Web.HttpContext.Current.Response.Close();
    }
}

private Stream GetReportStream()
{
    MemoryStream stream = new MemoryStream();
    using (FileStream file = File.Open(@"TemplateFileLocation", FileMode.Open))
    {
        byte[] buffer = new byte[file.Length];
        file.Read(buffer, 0, (int)file.Length);
        stream.Write(buffer, 0, buffer.Length);
    }
    using (PresentationDocument presentationDocument = PresentationDocument.Open(stream, true))
    {
        // Doing manipulations explained in your reference document link.

        presentationDocument.PresentationPart.Presentation.Save();
    }
    return stream;
}

不要忘记在您引用的链接上下载并检查整个解决方案。