Как преобразовать массив pdf Byte[] в загружаемый файл с помощью iTextSharp

Привет, ребята, у меня есть этот массив байтов, который я хочу преобразовать в pdf и сделать его доступным для загрузки. Кто-нибудь знает, как это делается?

вот мой контроллер действий

public ActionResult DownloadLabTestResult(string labTestResultID)
{
            PdfReader pdfReader = new PdfReader("Xue_Tang.pdf");

            MemoryStream stream = new MemoryStream();
            PdfStamper stamper = new PdfStamper(pdfReader, stream);

            pdfReader.Close();
            stamper.Close();
            stream.Flush();
            stream.Close();
            byte[] pdfByte = stream.ToArray();

            // So i got the byte array of the original pdf at this point. Now how do i convert this
            // byte array to a downloadable pdf? i tried the method below but to no avail.

            MemoryStream ms = new MemoryStream(pdfByte);

            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=labtest.pdf");
            Response.Buffer = true;
            Response.Clear();
            Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
            Response.OutputStream.Flush();
            Response.End();

            return new FileStreamResult(Response.OutputStream, "application/pdf");

 }

person Ari    schedule 02.09.2010    source источник
comment
Если у вас есть файл PDF на диске, вы можете прочитать его напрямую с помощью FileStream.   -  person Albin Sunnanbo    schedule 02.09.2010
comment
Даже если вам нужен PdfStamper, похоже, что у вас много потоков, вам не нужен ms steam, потокового потока должно быть достаточно, но вы не должны закрывать его перед использованием, вы можете попробовать ms.Seek(0, SeekOrigin.Начало); прежде чем добавить его в OutputStream.   -  person Albin Sunnanbo    schedule 02.09.2010
comment
о да, я всегда мог читать с локального диска, конечно, но я просто пытаюсь смоделировать что-то здесь, где мне предоставляется только массив байтов, и моя работа состоит в том, чтобы преобразовать его в загружаемый файл, точно не знаю, как это сделать, хе-хе = п   -  person Ari    schedule 02.09.2010


Ответы (1)


Я использую аналогичный код с некоторыми отличиями:

Response.Clear();
MemoryStream ms = new MemoryStream(pdfByte);
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=labtest.pdf");
Response.Buffer = true;
ms.WriteTo(Response.OutputStream);
Response.End();
  1. Вызов Reponse.Clear() ранее.
  2. Используйте MemoryStream.WriteTo для записи в Response.OutputStream.

Изменить: извините, я не видел, что вы используете ASP.NET MVC, приведенный выше код находится на странице aspx WebForms.

Для ASP.NET MVC не могли бы вы просто сделать

return new FileStreamResult(ms, "application/pdf");

?

person Andreas Paulsson    schedule 02.09.2010
comment
на самом деле да, вы можете сделать это. Я слишком усложняю вещи, ха-ха. Однако еще один вопрос: возможно ли преобразовать массив байтов (не зная, является ли это pdf, doc или txt) в правильный формат, не указывая, является ли его pdf txt или doc? я застрял с этим сейчас. - person Ari; 22.09.2010