Return Pdf from Asp.net MVC

What is the best way to create an html page from data? I have an html template with all tables, etc. I don't want to use templates like JqueryTemplate.

+5
source share
2 answers

Try this approach using 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

+6
source

Just create a pdf server and return the file instead of the html view. I do not understand which pdf provider you are using, but this is the solution for iTextSharp:

How to return PDF to browser in MVC?

+2
source

All Articles