MVC。 Itextsharp将pdf写入响应

时间:2010-09-30 13:33:39

标签: model-view-controller asp.net-mvc-2 itextsharp

我使用itexsharp生成pdf。 我正在创建MemoryStream,然后当我尝试将MemoryStream字节写入响应但没有运气。当我在我的控制器中执行此代码时,pdf没有响应。内存流正确普及我可以在调试器中看到这一点,但由于某种原因,这些数量的节点没有响应。

这是我的代码:

        HttpContext.Current.Response.ContentType = "application/pdf"; 
        ...
        using (Stream inputPdfStream = new FileStream(pdfFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
        using (Stream outputPdfStream = new MemoryStream())
        {
            PdfReader reader = new PdfReader(inputPdfStream);
            PdfStamper stamper = new PdfStamper(reader, outputPdfStream);
            ....

            //try one
            outputPdfStream.WriteTo(HttpContext.Current.Response.OutputStream); // NOT POPULATING Response
            //try two
            HttpContext.Current.Response.BinaryWrite(outputPdfStream.ToArray()); // NOT POPULATING Response Too

            HttpContext.Current.Response.End();
        }

可能有人有任何想法吗?

3 个答案:

答案 0 :(得分:3)

你能否使用

Response.ContentType = "application/pdf"
Response.AddHeader("Content-Type", "application/pdf")
Response.WriteFile(pdfFilePath)
Response.End()

答案 1 :(得分:1)

您应该使用FileContentResult Controller.File(byte[] content, string contentType)方法:

public ActionResult GeneratePDF()
{
    var outputStream = new MemoryStream(); // This will hold the pdf you want to send in the response

    /*
     * ... code here to create the pdf in the outputStrem
     */

    return File(outputStream.ToArray(), "application/pdf");
}

来源:Building PDFs in Asp.Net MVC 2

答案 2 :(得分:0)

可能内存流仍设置在最后写入字节之后的位置。它将从当前位置写入所有字节(没有)。如果你执行outputPdfStream.Seek(0),它会将位置设置回第一个字节,并将整个流的内容写入响应输出。

无论如何,就像Dean说的那样,你应该使用Reponse.WriteFile方法。