如何打开保存对话框以保存pdf

时间:2012-03-31 11:08:00

标签: c# asp.net-mvc-3

我真的很感激你的建议。我正在使用MVC3,我希望用户通过打开一个受密码保护的对话框来保存到自己的路径。你能帮我解决这个问题。

以下是我的代码:

mydoc.GenerateLetter(PdfData);               

string WorkingFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

using (MemoryStream m = new MemoryStream())
{
   m.Write(mydoc.DocumentBytes, 0, mydoc.DocumentBytes.Length);
   m.Seek(0, SeekOrigin.Begin);
   string OutputFile = Path.Combine(WorkingFolder, PdfData.Name + ".pdf");

   using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
   {
      PdfReader reader = new PdfReader(m);
      PdfEncryptor.Encrypt(reader, output, true, "abc123", "secret", PdfWriter.ALLOW_SCREENREADERS);
   }
}       

1 个答案:

答案 0 :(得分:1)

如果要显示“另存为”对话框,以便用户可以选择将PDF文件保存在其计算机上的位置,则可以使用Content-Disposition HTTP标头并将其设置为附件。同样在ASP.NET MVC应用程序中,而不是将文件保存到服务器(这是您的代码当前所做的),您应该将其流式传输到客户端:

public ActionResult DownloadPdf()
{
    var mydoc = ...
    mydoc.GenerateLetter(PdfData);
    byte[] pdf = mydoc.DocumentBytes;
    var reader = new PdfReader(pdf);
    using (var encrypted = new MemoryStream())
    {
        PdfEncryptor.Encrypt(reader, encrypted, true, "abc123", "secret", PdfWriter.ALLOW_SCREENREADERS);
        return File(encrypted.ToArray(), "application/pdf", PdfData.Name + ".pdf");
    }
}

现在,当用户导航到此控制器操作/SomeController/DownloadPdf时,他将看到“另存为”对话框,允许他下载加密的PDF文件并将其存储在计算机上的选定位置。