2010-09-02 27 views
14

Hei guys Tôi có mảng byte này tôi muốn chuyển đổi sang pdf và làm cho nó có sẵn để tải về. Bất cứ ai có bất kỳ ý tưởng làm thế nào điều này được thực hiện?Làm thế nào để chuyển đổi pdf Byte [] Mảng để tải về tập tin bằng cách sử dụng iTextSharp

đây là điều khiển hành động của tôi

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

Nếu bạn có tệp pdf trên đĩa, bạn có thể đọc trực tiếp bằng FileStream. –

+0

Thậm chí nếu bạn cần PdfStamper có vẻ như bạn có nhiều luồng, bạn không cần hơi "ms", luồng "luồng" phải đủ, nhưng bạn không nên đóng nó trước khi sử dụng, bạn có thể thử " ms.Seek (0, SeekOrigin.Begin); " trước khi bạn thêm nó vào OutputStream. –

+0

oh ya tôi luôn có thể đọc từ ổ đĩa cục bộ nhưng tôi chỉ cố gắng mô phỏng một cái gì đó ở đây mà im chỉ được cung cấp với mảng byte và công việc của tôi là chuyển đổi nó thành tệp có thể tải xuống, không biết chính xác cách làm điều đó hehe = p – Ari

Trả lời

26

Tôi đang sử dụng mã tương tự với một vài sự khác biệt:

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. Gọi Reponse.Clear() trước đó.
  2. Sử dụng MemoryStream.WriteĐể ghi vào Response.OutputStream.

Chỉnh sửa: xin lỗi, tôi không thấy bạn đang sử dụng ASP.NET MVC, mã ở trên nằm trong trang WebForms aspx.

Đối với ASP.NET MVC, có thể bạn không chỉ cần làm

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

?

+0

thực sự yeah bạn có thể làm điều này. tôi quá phức tạp những thứ haha. Một câu hỏi khác mặc dù, là nó thậm chí có thể chuyển đổi một mảng byte (không biết liệu pdf của nó hoặc doc hoặc txt) vào đúng định dạng, mà không xác định liệu pdf txt hoặc doc của nó? im bị mắc kẹt với điều này ngay bây giờ. – Ari

Các vấn đề liên quan