2012-10-09 24 views

回答

6

簡短的回答是不容易,你可以使用iTextSharp的(上的NuGet可用)和嘗試以下操作:

public EmptyResult CreatePdf() 
{ 
    var document = new Document(PageSize.A4, 50, 50, 25, 25); 

    // Create a new PdfWriter object, specifying the output stream 
    var output = new MemoryStream(); 
    var writer = PdfWriter.GetInstance(document, output); 

    // Open the Document for writing 
    document.Open(); 

    var html = RenderRazorViewToString("PdfView", pdfViewModel); 

    var worker = new HTMLWorker(document); 

    var css = new StyleSheet(); 
    css.LoadTagStyle(HtmlTags.TH, HtmlTags.BGCOLOR, "#616161"); 
    css.LoadTagStyle(HtmlTags.TH, HtmlTags.COLOR, "#fff"); 
    css.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "verdana"); 
    css.LoadTagStyle(HtmlTags.TH, HtmlTags.FONTWEIGHT, "bold"); 
    css.LoadStyle("even", "bgcolor", "#EEE"); 

    worker.SetStyleSheet(css); 
    var stringReader = new StringReader(html); 
    worker.Parse(stringReader); 

    document.Close(); 

    Response.ContentType = "application/pdf"; 
    Response.AddHeader("Content-Disposition", "PdfView.pdf"); 
    Response.BinaryWrite(output.ToArray()); 

    return new EmptyResult(); 
} 

private 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(); 
    } 
} 

您將需要的樣式和結果HTML擺弄得到它與合作HtmlWorker壽。

HTH

相關問題