从Asp.net MVC控制器返回Pdf文档

时间:2012-07-19 12:01:45

标签: html asp.net-mvc pdf razor

从视图中的数据生成html页面的最佳方法是什么?我有一个包含所有表格等的html模板。不想使用像JqueryTemplate这样的任何模板。

2 个答案:

答案 0 :(得分:6)

使用商业产品hiqpdf html to pdf converter尝试此方法:

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;
    }
}

此示例代码的来源:How to convert HTML to PDF using HiQPDF

答案 1 :(得分:2)

只需创建pdf服务器端并返回文件而不是html视图。 我不是你使用什么样的pdf提供程序,但这是iTextSharp的解决方案:

How to return PDF to browser in MVC?