6

What is the best way to generate html page from data in view? I have a html template with all tables and etc. Don't want to use any templating like JqueryTemplate.

Denis Agarev
  • 1,531
  • 4
  • 17
  • 34
lolli
  • 143
  • 1
  • 3
  • 11

2 Answers2

6

Try this approach using the hiqpdf html to pdf converter, a commercial product:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";
        Session["MySessionVariable"] = "My Session Variable Value assigned in Index"; 

        return View();
    }

    public ActionResult About()
    {
        return View();
    }

    public string RenderViewAsString(string viewName, object model)
    {
        // create a string writer to receive the HTML code
        StringWriter stringWriter = new StringWriter();

        // get the view to render
        ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, null);
        // create a context to render a view based on a model
        ViewContext viewContext = new ViewContext(
                ControllerContext,
                viewResult.View,
                new ViewDataDictionary(model),
                new TempDataDictionary(),
                stringWriter
                );

        // render the view to a HTML code
        viewResult.View.Render(viewContext, stringWriter);

        // return the HTML code
        return stringWriter.ToString();
    }

    [HttpPost]
    public ActionResult ConvertThisPageToPdf()
    {
        // get the HTML code of this view
        string htmlToConvert = RenderViewAsString("Index", null);

        // the base URL to resolve relative images and css
        String thisPageUrl = this.ControllerContext.HttpContext.Request.Url.AbsoluteUri;
        String baseUrl = thisPageUrl.Substring(0, thisPageUrl.Length - "Home/ConvertThisPageToPdf".Length);

        // instantiate the HiQPdf HTML to PDF converter
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // hide the button in the created PDF
        htmlToPdfConverter.HiddenHtmlElements = new string[] { "#convertThisPageButtonDiv" };

        // render the HTML code as PDF in memory
        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory(htmlToConvert, baseUrl);

        // send the PDF file to browser
        FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf");
        fileResult.FileDownloadName = "ThisMvcViewToPdf.pdf";

        return fileResult;
    }

    [HttpPost]
    public ActionResult ConvertAboutPageToPdf()
    {
        // get the About view HTML code
        string htmlToConvert = RenderViewAsString("About", null);

        // the base URL to resolve relative images and css
        String thisPageUrl = this.ControllerContext.HttpContext.Request.Url.AbsoluteUri;
        String baseUrl = thisPageUrl.Substring(0, thisPageUrl.Length - "Home/ConvertAboutPageToPdf".Length);

        // instantiate the HiQPdf HTML to PDF converter
        HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

        // render the HTML code as PDF in memory
        byte[] pdfBuffer = htmlToPdfConverter.ConvertHtmlToMemory(htmlToConvert, baseUrl);

        // send the PDF file to browser
        FileResult fileResult = new FileContentResult(pdfBuffer, "application/pdf");
        fileResult.FileDownloadName = "AboutMvcViewToPdf.pdf";

        return fileResult;
    }
}

Source of this sample code: How to convert HTML to PDF using HiQPDF

user1589151
  • 111
  • 1
  • 2
2

Just create pdf server side and return File instead of html view. I don't what kind of pdf provider do you use but this a solution for iTextSharp:

How to return PDF to browser in MVC?

Community
  • 1
  • 1
Denis Agarev
  • 1,531
  • 4
  • 17
  • 34
  • Well you meshed me. Lets start from the beginning. What is your real case? what do you want to do? There is many different send any kinds of data from controller to html page with or without controller – Denis Agarev Jul 19 '12 at 13:20