2014-02-13 168 views
0

HTML转换为PDF我试图将HTML转换成PDF格式,但它给错误:在ASP .NET MVC

Failed to load PDF document. 

我想生成一个简单的PDF格式,而无需使用任何.dll文件。有没有什么办法可以在不使用iTextSharp的情况下生成PDF,例如旋转w7?

代码:

public ActionResult EventoVisualizarPDF() 
    { 
     HttpClient client = new HttpClient(); 
     client.BaseAddress = new Uri(ConfigurationManager.AppSettings["UrlAPI"]); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var id = Session["intCodigoGrupoUsuario"]; 
     var intUsuarioId = Session["intUsuarioId"]; 
     string url = ""; 

     url = "api/usuario/GetBuscaUsuario/" + intUsuarioId; 

     HttpResponseMessage resposta = client.GetAsync(url).Result; 
     var usuario = resposta.Content.ReadAsAsync<Usuario>().Result; 

     url = "api/evento/GetEventoByUsuario/" + id; 

     HttpResponseMessage response = client.GetAsync(url).Result; 

     if (response.IsSuccessStatusCode) 
     { 
      var eventos = response.Content.ReadAsAsync<IEnumerable<Evento>>().Result; 

      string htmlText = this.RenderRazorViewToString("RelatorioEventoPDF", eventos); 
      byte[] buffer = System.Text.Encoding.Default.GetBytes(htmlText); 
      return File(buffer, "application/pdf"); 
     } 
     else 
     { 
      string msg = response.IsSuccessStatusCode.ToString(); 
      throw new Exception(msg); 
     } 
    } 

    public string RenderRazorViewToString(string viewName, object model) 
    { 
     ViewData.Model = model; 
     using (var sw = new StringWriter()) 
     { 
      var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
      var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
      viewResult.View.Render(viewContext, sw); 
      viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); 
      return sw.GetStringBuilder().ToString(); 
     } 
    } 

回答

1

不幸的是没有,没有为.NET Framework中的PDF文件的支持。所以你将不得不使用一些第三方组件,如iTextSharp或PdfSharp。这里有不少选择,包括开源和商业。

现在,考虑到许多这些组件都支持直接从html内容生成pdf,所以如果您将简化的MVC剃刀视图渲染为字符串(就像您正在做的一样),您可以轻松地将其转换为PDF格式。

1

我认为你必须使用iTextSharp的,在这里是生成的HTML代码的PDF简单的代码...

公共虚拟无效打印PDF(字符串HTML,INT ID) - > string中的HTML只是通过HTML在字符串中的页面fromate和id只是pdf中名称的一个数字。 {

String htmlText = html.ToString(); 

Document document = new Document(); 

string filePath = HostingEnvironment.MapPath("~/Content/Pdf/"); 

PdfWriter.GetInstance(document, new FileStream(filePath + "\\pdf-"+id+".pdf", 
FileMode.Create)); 

document.Open(); 

iTextSharp.text.html.simpleparser.HTMLWorker hw = 

       new iTextSharp.text.html.simpleparser.HTMLWorker(document); 



hw.Parse(new StringReader(htmlText)); 

document.Close(); 

}