Asp.net 在c#net中导出pdf时正在下载额外的pdf

Asp.net 在c#net中导出pdf时正在下载额外的pdf,asp.net,pdf,pdf-writer,Asp.net,Pdf,Pdf Writer,im导出时,一个pdf正在所需位置下载,但另一个pdf正在下载文件夹中下载 如何停止下载额外的pdf Response.ContentType = "application/pdf"; Response.AddHeader("content-disposition", "attachment;filename=" + Projname + ".pdf"); Response.Cache.SetCacheability(Htt

im导出时,一个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
写入服务器文件系统上的文件

如果您不想这样做,则必须将
新文件流(strPath,FileMode.Create)
替换为其他内容,例如HTTP响应输出流:

PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
这有潜在的缺点

  • HTTP响应没有包含其有效负载大小的标头。在这种情况下,已知某些浏览器版本存在问题;及
  • 如果PDF创建过程中出现错误,客户端将检索半个PDF而不是正确的错误消息

如果这些缺点让您担心,您可能希望实例化一个
MemoryStream
,将
PdfWriter
指向它,构建PDF,从流中检索
字节[]
,为该数组的大小创建一个内容长度头,最后将数组写入
Response.OutputStream

代码的前三行初始化(HTTP?)响应,以将PDF作为附件返回,即下载;其余部分创建一个PDF并将其保存到您的D:驱动器中。除非隐藏相关内容,否则调用方应检索空PDF文件作为下载。如果不希望这样,请不要以这种方式初始化响应。在本地主机中,我可以导出,但在live server中,获取错误-拒绝访问路径“D:\WeeklyReport of Testing project.pdf”。@mklAccess。。。否认-听起来很自然。为什么生产服务器允许web应用程序将某些内容存储到其D:\文件夹中?我只想在任何地方下载,但不想在live上托管的应用程序文件夹中下载。我的意思是,如果任何人单击“导出”按钮,他们可以在系统中获取文件。如果文件保存在下载文件夹中,也可以,但它应该在client/user@mklSo系统中下载。为什么要在服务器上检索针对
文件流的
PdfWriter