2016-06-20 26 views
0

iv'e创建了一个从表单生成pdf文件的方法,它使用itexsharp保存到正确的路径,但问题是我无法下载它。从源文件下载PDF文件的问题

这是我的代码:

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

    var pdfTemplate = HttpContext.Current.Server.MapPath("~/ress/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(); 
} 
+0

这是一个坏主意,创建PDF作为文件服务器,除非你需要存档该文件。你需要归档该文件吗? –

+0

当然是有特殊需求 –

+0

你还在那里@BrunoLowagie! –

回答

0

如果你想传递一个文件,你可以跳过字节数组和MemoryStream,只是使用Response.WriteFile(string)

+0

我没有传递文件的问题,问题是要下载它! –