如何在mvc3中保存客户端机器中的pdf文件
本文关键字:机器 pdf 文件 客户端 保存 mvc3 | 更新日期: 2023-09-27 18:29:41
我动态生成一个pdf文件并将其保存到服务器端,但我需要将其保存在客户端机器上。如何做到这一点。。
Document doc = new Document();
MemoryStream memoryStream = new MemoryStream();
string PDFName = ProjectName + ".pdf";
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/ProjectFiles") + "/" +
PDFName, FileMode.Create));
doc.Open();
//PDF Content
doc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + PDFName);
Response.Buffer = true;
Response.Clear();
Response.OutputStream.Write(memoryStream.GetBuffer(), 0, memoryStream.GetBuffer().Length);
Response.OutputStream.Flush();
Response.End();
In Response.OutputStream.Write(memoryStream.GetBuffer(), 0, memoryStream.GetBuffer().Length);
memoryStream长度为0。我需要将保存的pdf下载到Clint机器中。请帮我解决这个问题。。
您没有向memoryStream
写入任何内容。
由于您在每个请求上都生成PDF,因此无需将它们保存到文件中。您可以直接将PDF生成到MemoryStream
。
MemoryStream memoryStream = new MemoryStream();
PdfWriter writer = PdfWriter.GetInstance(doc, memoryStream);
如果你的PDF不是动态的(例如,没有必要在每次请求时都生成它们),你可以像现在这样将它们生成到文件系统,然后只从磁盘读取:
using (MemoryStream ms = new MemoryStream())
{
using (FileStream file = new FileStream(YourPdfFile, FileMode.Open, FileAccess.Read)) {
byte[] bytes = new byte[file.Length];
file.Read(bytes, 0, (int)file.Length);
ms.Write(bytes, 0, (int)file.Length);
}
}
但只有当PDF生成一次,然后只从磁盘提供时,这才有意义。
EDIT:在写入流后,有必要将memoryStream位置设置为零,因为它位于末尾。
你必须这样影响内存流:
PdfWriter pdfWriter = PdfWriter.GetInstance(document, memoryStream);