MVC.Itextsharp написать в ответ pdf - PullRequest
       50

MVC.Itextsharp написать в ответ pdf

2 голосов
/ 30 сентября 2010

Я генерирую PDF, используя itexsharp. Я создаю 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 ]

3 голосов
/ 30 сентября 2010

Не могли бы вы использовать

Response.ContentType = "application/pdf"
Response.AddHeader("Content-Type", "application/pdf")
Response.WriteFile(pdfFilePath)
Response.End()
1 голос
/ 30 января 2011

Вы должны использовать метод 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");
}

Источник: Создание PDF-файлов в Asp.Net MVC 2 .

0 голосов
/ 30 сентября 2010

Вероятно, поток памяти все еще установлен в позиции после последнего записанного байта. Он будет записывать все байты из текущей позиции (которой нет). Если вы сделаете outputPdfStream.Seek(0), он вернет позицию к первому байту и запишет содержимое всего потока в ответный вывод.

В любом случае, как говорит Дин, вы должны просто использовать метод Reponse.WriteFile.

...