我真的很感激你的建议。我正在使用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);
}
}
答案 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文件并将其存储在计算机上的选定位置。