2010-09-02 2 views
14

Привет, ребята У меня есть этот массив байтов, который я хочу преобразовать в pdf и сделать его доступным для загрузки. Кто-нибудь знает, как это делается?Как преобразовать PDF Byte [] Массив в загружаемый файл с помощью iTextSharp

вот мой 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

Если у вас есть файл pdf на диске, вы можете прочитать его напрямую с помощью FileStream. –

+0

Даже если вам нужен PdfStamper, похоже, что вам нужно много потоков, вам не нужно пар «ms», поток «stream» должен быть достаточным, но вы не должны закрывать его, прежде чем использовать его, вы можете попробовать: ms.Seek (0, SeekOrigin.Begin); " прежде чем добавлять его в OutputStream. –

+0

oh ya, я всегда мог читать с локального диска, но я просто пытаюсь имитировать что-то здесь, где им предоставляется только массив байтов, и моя задача - преобразовать его в загружаемый файл, точно не знаю, как это сделать = p – Ari

ответ

26

Я использую подобный код с некоторыми отличиями:

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. Вызов Reponse.Clear() ранее.
  2. Используйте MemoryStream.WriteTo, чтобы написать Response.OutputStream.

Редактировать: извините, я не видел, что вы используете ASP.NET MVC, приведенный выше код находится на странице aspx WebForms.

для ASP.NET MVC, не могли бы вы сделать

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

?

+0

На самом деле вы можете это сделать. я чрезмерно усложнил вещи ха-ха. Еще один вопрос: возможно ли даже преобразовать массив байтов (не зная, является ли его pdf или doc или txt) в правильном формате, не указав, является ли его pdf txt или doc? Я застрял с этим сейчас. – Ari