2010-09-02 20 views
14

Hei çocuklar, pdf dosyasına dönüştürmek ve indirmek için mevcut olan bu bayt dizisine sahibim. Bunun nasıl yapıldığına dair bir fikri olan var mı?pdf Byte [] Array, iTextSharp kullanarak indirilebilir dosyaya dönüştürülür.

burada birkaç fark benzer bir kod kullanıyorum benim Eylem Kontrolör

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

Diskte pdf dosyasına sahipseniz doğrudan FileStream ile okuyabilirsiniz. –

+0

PdfStamper'a ihtiyacınız olsa bile, birçok akışa sahip olmanıza rağmen, "ms" buharına ihtiyacınız olmamalı, "akış" akışı yeterli olmalı, ancak kullanmadan önce onu kapatmamalısınız, " ms.Seek (0, SeekOrigin.Begin); " OutputStream'e eklemeden önce. –

+0

oh Tabii her zaman yerel diskten okuyabiliyordum ama sadece burada bayt dizisi ile sağlanan bir şey simüle etmeye çalışıyorum ve işim yüklenebilir bir dosyaya dönüştürmek, bu hehe nasıl yapılacağını tam olarak bilmiyorum = p – Ari

cevap

26

geçerli:

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. Çağrı Reponse.Clear() daha önce.
  2. Response.OutputStream dosyasına yazmak için MemoryStream.WriteTo kullanın.

Düzeltme: üzgünüm, ASP.NET MVC kullandığınızı görmedim, yukarıdaki kod bir WebForms aspx sayfasında.

ASP.NET MVC için

, sadece

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

yapamadı?

+0

aslında bunu yapabilirsin. Ben aşırı karmaşık şeyler haha. Başka bir soru, pdf txt veya doc olup olmadığını belirtmeksizin, bir bayt dizisini (pdf veya doc veya txt'nin) doğru formata dönüştürülmesini bile mümkün kılıyor mu? şimdi bununla takıldım. – Ari

İlgili konular