2012-02-03 2 views
0

Я пытаюсь загрузить несколько pdf-файлов в виде вложений в моем приложении asp.net. Я создал несколько шаблонов и заполнил значения, используя pdfstamper (itextsharp). Я могу заполнить значения, но не могу их загрузить.скачать несколько pdf

private void FillForm(string path, DataTable BridgeValues, DataTable Comments, DataTable Maintenance,string Newfilename) 
    { 
     try 
     { 
      string pdfTemplate = path; 
      string newFile = Newfilename; 
      string Pathser = ""; 
      if (!System.IO.Directory.Exists(Server.MapPath(@"~/PDF/"))) 
      { 
       System.IO.Directory.CreateDirectory(Server.MapPath(@"~/PDF/")); 
      } 

      if (Directory.Exists(Server.MapPath(@"~/PDF/"))) 
      { 
       Pathser = Server.MapPath(@"~/PDF/" + Newfilename); 
      } 
      System.IO.MemoryStream mStream = new System.IO.MemoryStream(); 
      // create a new PDF reader based on the PDF template document 
      PdfReader pdfReader = new PdfReader(pdfTemplate); 
      PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(Pathser, FileMode.Create)); 
      AcroFields pdfFormFields = pdfStamper.AcroFields; 
      DataColumn dc = null; 
      for (int i = 0; i < BridgeValues.Columns.Count - 1; i++) 
      { 
       dc = BridgeValues.Columns[i]; 
       pdfFormFields.SetField(dc.ColumnName.ToString(), BridgeValues.Rows[0][dc].ToString()); 
      } 
      pdfStamper.FormFlattening = true; 

      // close the pdf 
      pdfStamper.Close(); 
      ////Response.ContentType = "application/octet-stream"; 
      Response.ContentType = "application/pdf"; 
      ////Response.AddHeader("Content-Disposition", "attachment; filename=Report.pdf"); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + Newfilename + ""); 
      ////Response.BinaryWrite(mStream.ToArray()); 
      Response.TransmitFile(Server.MapPath(("~/PDF/"+ Newfilename))); 
      Response.Clear(); 
      Response.End(); 
     } 
     catch (System.Threading.ThreadAbortException lException) 
     { 

      // do nothing 

     } 
    } 

Первый раз, когда я пытался создать один PDF, он работал, но позже, когда я пытался загрузить несколько файлов он дал execption. Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов.

+1

Почему вы ловли ThreadAbortException? Он будет автоматически обновлен, но вы не должны его ловить ... Что касается исключения - это * не включало бы * часть «Невозможно оценить выражение ...» - это то, что показывает отладчик, он не является частью исключения. –

+0

Это была последняя попытка, которую я сделал, было некоторое исключение: «Невозможно оценить выражение, потому что код оптимизирован или собственный кадр находится поверх стека вызовов». поэтому я попробовал уловку. –

+0

Нет, это * не * исключение. Это действительно, на самом деле нет. Это просто то, что отображается в отладчике. Если вы посмотрите в исключении для сообщения, это будет не так. –

ответ

1

Я не думаю, что вы можете скачать несколько файлов, сделав один запрос и вернув коллекцию из действия. Я бы предположил, что вам нужно разрешить пользователю загружать несколько файлов, которые вы ZIP их, и передавать архив в браузер.

Вот пример сжать несколько файлов: http://devpinoy.org/blogs/keithrull/archive/2008/01/25/how-to-create-zip-files-in-c-with-sharpziplib-ziplib.aspx

+0

Я зацикливал количество файлов и загружал их, но это плохая идея. Как вы сказали, я буду загружать их в виде zip.can я могу сохранить много файлов на сервере и загрузить их как zip? –

Смежные вопросы