2010-09-02 11 views
14

Hei, mam tę tablicę bajtów, którą chcę przekonwertować na pdf i udostępnić do pobrania. Ktoś ma pojęcie, jak to się robi?Jak przekonwertować pdf Byte [] Array na plik do pobrania przy użyciu iTextSharp

tutaj jest mój 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

Jeśli masz plik pdf na dysku, możesz go odczytać bezpośrednio za pomocą FileStream. –

+0

Nawet jeśli potrzebujesz PdfStamper wygląda na to, że masz wiele strumieni, nie powinieneś potrzebować pary "ms", strumień "stream" powinien wystarczyć, ale nie powinieneś go zamykać przed użyciem, możesz spróbować " ms.Seek (0, SeekOrigin.Begin); " przed dodaniem go do OutputStream. –

+0

oh, zawsze mogłem czytać z lokalnego dysku, ale próbuję tylko symulować coś tutaj, gdzie mam tylko tablicę bajtów, a moja praca polega na przekonwertowaniu go do pliku do pobrania, nie wiem dokładnie jak to zrobić, hehe = p – Ari

Odpowiedz

26

używam podobny kod z kilkoma różnicami:

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. połączeń Reponse.Clear() wcześniej.
  2. Użyj MemoryStream.WriteTo, aby napisać do Response.OutputStream.

Edycja: przepraszam, nie widziałem, że używasz ASP.NET MVC, powyższy kod jest na stronie aspx WebForms.

dla ASP.NET MVC, nie można po prostu zrobić

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

?

+0

faktycznie tak, możesz to zrobić. zbyt skomplikowane rzeczy haha. Jeszcze jedno pytanie, czy możliwe jest nawet przekonwertowanie tablicy bajtów (nie wiedząc, czy jest to plik pdf lub doc lub txt) we właściwym formacie, bez określania, czy jest to plik w formacie pdf czy doc? Teraz utknąłem z tym. – Ari

Powiązane problemy