-1

在我导出时,一个 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();
4

1 回答 1

0

这条线

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 而不是正确的错误消息。

如果这些缺点让您担心,您可能希望实例化 a MemoryStreamPdfWriter以它为目标,构建 PDF,byte[]从流中检索 ,为该数组的大小创建内容长度标头,最后将数组写入Response.OutputStream.

于 2015-05-28T12:33:02.670 回答