2017-09-24 147 views
0

在我的方法在控制器中我使用下面的代码来保存pdf。保存PDF文件在ASP中的下载文件夹中MVC

HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml(htmlContent); 
      HtmlNode node = doc.GetElementbyId("DetailsToPDF"); 
      HtmlToPdfConverter htmlToPdf = new HtmlToPdfConverter(); 
      var pdfBytes = htmlToPdf.GeneratePdf("<html><body>" + node.InnerHtml + "</body></html>"); 

      Response.ContentType = "application/pdf"; 
      Response.ContentEncoding = System.Text.Encoding.UTF8; 
      Response.AddHeader("Content-Disposition", "attachment; filename=TEST.pdf"); 
      Response.BinaryWrite(pdfBytes); 
      Response.Flush(); 
      Response.End(); 

在调试器中没有任何异常情况下,所有内容都已通过。但是文件没有保存。我究竟做错了什么?

+0

这实际上不保存文件。它只会要求您的浏览器处理该文件。根据浏览器的配置方式,它可能会保存它,它可能会显示它 –

+0

浏览器(Chrome)没有显示任何内容。我应该在哪里配置它? – maciejka

+0

实际上你正在使用'BinaryWrite'将文件内容写入HTTP响应,它不会返回任何要下载的文件。尝试返回'FileResult' /'FileContentResult',它显示选项以在浏览器中打开或下载文件。 –

回答

1

推荐的方式返回ASP.NET MVC文件使用File() helper方法:

public ActionResult Download() 
{ 
    // Starting with pdfBytes here... 
    // ... 
    var pdfBytes = htmlToPdf.GeneratePdf("<html><body>" + node.InnerHtml + "</body></html>"); 
    var contentDisposition = new System.Net.Mime.ContentDisposition 
    { 
     FileName = "TEST.pdf", 
     Inline = false 
    }; 
    Response.AppendHeader("Content-Disposition", contentDisposition.ToString()); 
    return File(pdfBytes, "application/pdf"); 
} 
+0

在这个解决方案中,我可以在UTF.8上设置编码吗? – maciejka

+0

有什么特别的理由吗? PDF文件具有自己的编码,文件结果仅返回字节。如果你得到一些格式不正确的字符,这个问题可能在PDF生成过程本身的某个地方。但是你仍然可以尝试调用'Response.ContentEncoding = System.Text.Encoding.UTF8;'或'Response.Charset =“utf-8”;'看看它是否有帮助 – thmshd

+0

原因:波兰语字母:) – maciejka

0
string path = Server.MapPath("~/Content/files/newPDFFile.pdf"); 
    WebClient client = new WebClient(); 
    Byte[] buffer = client.DownloadData(path); 
    if (buffer != null) 
    { 

     Response.Clear(); 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment;filename=" + "PDFfile.pdf"); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.BinaryWrite(buffer); 
     Response.End(); 
    } 
相关问题