2010-09-02 42 views
14

Hei chicos Tengo esta matriz de bytes que quiero convertir a pdf y ponerla a disposición para su descarga. ¿Alguien tiene alguna idea de cómo se hace esto?Cómo convertir pdf Byte [] Matriz a archivo descargable usando iTextSharp

aquí es mi Action Controller

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"); 

} 
+0

Si tiene el archivo pdf en el disco, puede leerlo directamente con FileStream. –

+0

Incluso si necesita el PdfStamper parece que tiene muchas transmisiones, no debería necesitar el "ms" de vapor, el flujo de "transmisión" debería ser suficiente, pero no debe cerrarlo antes de usarlo, puede intentarlo " ms.Seek (0, SeekOrigin.Begin); " antes de agregarlo al OutputStream. –

+0

oh ya siempre pude leer desde el disco local, pero estoy tratando de simular algo aquí donde estoy solo provisto con la matriz de bytes y mi trabajo es convertirlo en un archivo descargable, no sé exactamente cómo hacer eso jeje = p – Ari

Respuesta

26

estoy usando un código similar con algunas diferencias:

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. llamada Reponse.Clear() anterior.
  2. Use MemoryStream.WriteTo para escribir en Response.OutputStream.

Editar: lo siento, no vi que esté utilizando ASP.NET MVC, el código anterior se encuentra en una página aspx de WebForms.

para ASP.NET MVC, no podía que acaba de hacer

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

?

+0

en realidad, sí, puedes hacer esto. Me complicaron las cosas, jaja. Sin embargo, otra pregunta es si es posible convertir una matriz de bytes (sin saber si su pdf o doc o txt) en el formato correcto, sin especificar si su pdf txt o doc? estoy atorado con esto ahora. – Ari

Cuestiones relacionadas