1

我在 asp.net 应用程序中有一个处理程序。当有某种请求时,我希望用户获得下载窗口,我将PDF流放在那里。我不希望 PDF 保存在内存中。我有以下代码,但无法打开,说 pdf 文件已损坏,无法打开。如果您认为我的目标不好,请告诉我实现目标的其他方法。

 MemoryStream stream = new MemoryStream();
                CreatePFD(T.Text, stream);

                context.Response.Write(stream);


                context.Response.ContentType = "application/pdf";
                context.Response.AddHeader("content-disposition", "attachment; filename=" + "Nots__Saved__FIle__fileName.pdf");

现在我有这个代码:

Document Doc = new Document(PageSize.A4, 80, 50, 30, 65); System.IO.Stream outputStream = new System.IO.FileStream(@"C:\inetpub\wwwroot\c\wefwe.pdf", System.IO.FileMode.OpenOrCreate);

            PdfWriter.GetInstance(Doc, outputStream);

            Doc.Open();

            List<IElement> htmlarraylist = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StringReader(T.Text), null);
            for (int k = 0; k < htmlarraylist.Count; k++)
            {
                Doc.Add((IElement)htmlarraylist[k]);
            }

            outputStream.CopyTo(context.Response.OutputStream);
            Doc.Close();

            context.Response.ContentType = "application/pdf";
            context.Response.AddHeader("content-disposition", "attachment; filename=" + "Nots__Saved__FIle__fileName.pdf");

当我保存pdf时,文件是正确的......但是当我得到响应时,文件是正确的。损坏...

4

1 回答 1

3

您需要通过设置来倒带流stream.Position = 0

此外,Response.Write(stream)只会打印stream.ToString().

相反,您应该调用stream.CopyTo(Response.OutputStream).

于 2012-04-26T14:50:04.767 回答