当我导出时,一个PDF正在下载到所需的位置,但另一个PDF正在下载到下载文件夹
如何停止下载额外的pdf?
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + Projname + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
design.RenderControl(htmlWrite);
string myText = stringWrite.ToString().Replace("&", "&");
StringReader sr = new StringReader(myText.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
string strPath = "D:\WeeklyReport of " + Projname + ".pdf";
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream(strPath, FileMode.Create));
pdfDoc.Open();
XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
pdfDoc.Close();
pdfDoc.Dispose();
这一行
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, new FileStream(strPath, FileMode.Create));
您的代码的调用PdfWriter
写入服务器文件系统上的文件。
如果你不想这样,你必须用其他东西替换new FileStream(strPath, FileMode.Create)
,例如HTTP响应输出流:
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
这有潜在的缺点,
- HTTP响应没有包含其有效负载大小的报头。已知某些浏览器版本在这种情况下存在问题;和
- 在PDF创建过程中出现错误的情况下,客户端检索一半PDF,而不是正确的错误消息。
如果这些缺点让您担心,您可能想要实例化一个MemoryStream
,将PdfWriter
瞄准它,构建PDF,从流中检索byte[]
,为该数组的大小创建一个内容长度头,最后将该数组写入Response.OutputStream
。