2014-02-13 224 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(); 

}