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 に答える