2016-04-20 5 views
0

Я создал функцию, которая создает файл PDF и вставляет его в файл doc, проблема в том, что я не могу загрузить его из этого каталога, вот мой код:скачать pdf-файл с сервера не работает с помощью itextSharp

private void FillForm(Dictionary<string, string> dic) 
    { 

     var pdfTemplate = HttpContext.Current.Server.MapPath("~/ress/NOUVELLE_VERSION_GENE_15_04_2014.pdf"); //_pdfTemplet; 

     var newFile = _newFileName + "_" + Guid.NewGuid() + ".pdf"; 

     _gNewFile = newFile.ToString(); 

     var pdfReader = new PdfReader(System.IO.File.ReadAllBytes(pdfTemplate)); 

     var pfileStream = new FileStream(string.Format(HttpContext.Current.Server.MapPath("~/ress/") + "{0}", newFile), FileMode.Create); 

     var pdfStamper = new PdfStamper(pdfReader, pfileStream); 
     var pdfFormFields = pdfStamper.AcroFields; 

     foreach (var entry in dic) 
     { 
      pdfFormFields.SetField(entry.Key, entry.Value); 
     } 
     pdfStamper.FormFlattening = true; 
     pdfStamper.JavaScript = "this.print(true);\r"; 
     pdfStamper.Writer.CloseStream = false; 
     pdfReader.Close(); 
     pdfStamper.Close(); 
     UPContract.Update(); 
     pfileStream.Close(); 
     pdf.FilePath = string.Format("../Ress/{0}", Path.GetFileName(_gNewFile)); 

     Response.Clear(); 
     byte[] bytes = System.IO.File.ReadAllBytes(string.Format(HttpContext.Current.Server.MapPath("~/ress/") + "{0}", _gNewFile)); 
     Response.ContentType = "application/pdf"; 
     MemoryStream ms = new MemoryStream(bytes); 
     Response.AddHeader("content-disposition", "attachment;filename=" + "fiche abonnement_" + _gNewFile + ".pdf"); 
     Response.Buffer = true; 
     ms.WriteTo(Response.OutputStream); 
     Response.Flush(); 
     Response.End(); 

}

если кто-то не могу дать мне совет! Спасибо.

+1

Почему вы создаете файл в файловой системе? Почему вы не создаете его в памяти? Вам нужен файл для файловой системы? –

+0

да, мне нужно это на сервере, чтобы клиент мог его загрузить, но если вы можете показать мне, как его создать в памяти, я буду очень благодарен. –

+0

Так что вам не нужно это в файловой системе сервера, чтобы клиент мог ее загрузить. Достаточно создать его в памяти. Пожалуйста, не путайте людей, отвечая загадками. Будьте точнее! –

ответ

0

Если вам не нужен файл в файловой системе, вы можете создать его в памяти. Это делается с использованием MemoryStream. Я взял ваш код, скопировал/вставил его и адаптировал так, чтобы FileStream был заменен на MemoryStream.

Я не могу проверить свой код, так что вам, возможно, потребуется настроить его здесь и там, но вы получите представление о том, что вы должны попытаться достичь:

var pdfTemplate = HttpContext.Current.Server.MapPath("..."); 
var pdfReader = new PdfReader(System.IO.File.ReadAllBytes(pdfTemplate)); 
var output = new MemoryStream(); 
var pdfStamper = new PdfStamper(pdfReader, output); 
var pdfFormFields = pdfStamper.AcroFields; 
foreach (var entry in dic) 
{ 
    pdfFormFields.SetField(entry.Key, entry.Value); 
} 
pdfStamper.FormFlattening = true; 
pdfStamper.JavaScript = "this.print(true);\r"; 
pdfStamper.Writer.CloseStream = false; 
pdfStamper.Close(); 
pdfReader.Close(); 
Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("Content-Disposition", "attachment;filename=fiche abonnement_" + _gNewFile + ".pdf"); 
Response.BinaryWrite(output.ToArray()); 
Response.Flush(); 
Response.End(); 
+0

это не сработало, мой друг, никакой реакции, когда я нажимаю кнопку подтверждения! –

+0

Что такое кнопка подтверждения? –

+0

Я объясню концепцию, у меня есть форма, я заполняю информацию (имя, адрес электронной почты ...), когда я нажимаю кнопку проверки, которая вызывает эту функцию, чтобы использовать шаблон pdf для записи информации в нее, а затем загрузить Это. вот и все, когда я использовал свой прошлый код, он создает файл pdf в определенном каталоге, но загрузка не работает, теперь, когда я заменяю свой код вашими изменениями, я могу видеть страницу загрузки, но после того, как она не закончилась, объявиться ! –