2010-09-02 5 views
14

Hei Jungs Ich habe dieses Byte-Array Ich möchte in PDF konvertieren und stellen Sie es zum Download bereit. Hat jemand eine Idee, wie das gemacht wird?Wie konvertiert man pdf Byte [] Array in eine herunterladbare Datei mit iTextSharp

hier ist meine 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

Wenn Sie die PDF-Datei auf der Festplatte haben, könnten Sie sie direkt mit einem FileStream lesen. –

+0

Auch wenn du den PdfStamper brauchst, sieht es so aus als hättest du viele Streams, du solltest nicht die "ms" -Dämpfung brauchen, der "Stream" -Stream sollte reichen, aber du solltest es nicht schließen bevor du es verwendest, du könntest versuchen " ms.Seek (0, SeekOrigin.Begin); " bevor Sie es dem OutputStream hinzufügen. –

+0

oh ya ich könnte immer von der lokalen Festplatte natürlich lesen, aber ich versuche nur etwas hier zu simulieren, wo ich nur mit dem Byte-Array zur Verfügung gestellt und mein Job ist es in eine herunterladbare Datei zu konvertieren, nicht genau wissen, wie das hehe = p – Ari

Antwort

26

ich mit einem paar Unterschieden ähnlichen Code verwenden:

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. Anruf Reponse.Clear() früher.
  2. Verwenden Sie MemoryStream.WriteTo, um in Response.OutputStream zu schreiben.

Bearbeiten: Sorry, ich habe nicht gesehen, dass Sie ASP.NET MVC verwenden, ist der obige Code in einer WebForms Aspx-Seite.

für ASP.NET MVC, konnte nicht Sie tun nur

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

?

+0

eigentlich ja du kannst das tun. Ich übermäßig komplizierte Dinge haha. Eine andere Frage ist, ist es sogar möglich, ein Byte-Array (nicht zu wissen, ob seine pdf oder doc oder txt) in das richtige Format zu konvertieren, ohne Angabe, ob seine pdf txt oder doc? Ich bin jetzt mit diesem Thema beschäftigt. – Ari