2010-09-02 3 views
14

Hei guys Ho questo array di byte che voglio convertire in pdf e renderlo disponibile per il download. Qualcuno ha idea di come sia fatto?Come convertire pdf Byte [] Array in file scaricabili usando iTextSharp

qui è il mio 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

Se si dispone del file PDF su disco, è possibile leggerlo direttamente con FileStream. –

+0

Anche se hai bisogno di PdfStamper sembra che tu abbia molti stream, non dovresti aver bisogno del vapore "ms", il flusso "stream" dovrebbe essere sufficiente, ma non dovresti chiuderlo prima di usarlo, puoi provare " ms.Seek (0, SeekOrigin.Begin); " prima di aggiungerlo a OutputStream. –

+0

oh ya potrei sempre leggere dal disco locale, ma sto solo cercando di simulare qualcosa qui dove sono fornito solo con l'array di byte e il mio lavoro è convertirlo in un file scaricabile, non so esattamente come farlo = p – Ari

risposta

26

Sto usando codice simile con alcune differenze:

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. chiamata Reponse.Clear() in precedenza.
  2. Utilizzare MemoryStream.WriteTo per scrivere su Response.OutputStream.

Modifica: mi dispiace, non ho visto che si sta utilizzando ASP.NET MVC, il codice sopra è in una pagina aspx WebForms.

per ASP.NET MVC, non poteva basta fare

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

?

+0

in realtà si puoi farlo. ho cose troppo complicate haha. Un'altra domanda però, è anche possibile convertire un array di byte (non sapendo se il suo pdf o doc o txt) nel formato giusto, senza specificare se il suo pdf txt o doc? Im bloccato con questo ora. – Ari