2010-09-22 26 views
1

我使用this作为参考生成PowerPoint文件。用户可以根据许多标准搜索其他用户。基于用户的信息保存在PowerPoint文件中。但我无法将所有PowerPoint文件保存在服务器上。ASP.NET:使用另存为下载PowerPoint文件

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

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

我好像是个坏Google员工。我从搜索字符串中删除了“powerpoint”,并且有很多点击。但是,仍然有任何意见表示赞赏。

+0

这个问题需要一个openxml-sdk标签 – 2010-09-22 12:19:26

回答

2

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

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

下面的代码是一个示例代码,我如何使用Open XML SDK和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; 
} 

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

+0

Ok,Musa。看上去不错。我已将来自我发布的网址的代码与您的建议结合起来。我需要再测试一下,但是我确定我找到了我正在寻找的东西。谢谢....... – 2010-09-22 14:28:19

+0

乐意提供帮助。我希望它能起作用。 – 2010-09-22 16:10:06