将MVC视图保存为PDF

时间:2017-08-31 20:51:45

标签: html asp.net-mvc pdf

正如标题所示,我正在寻找一种将.NET MVC视图导出为PDF的方法。

我的程序是这样的:

第1页 收集信息

第2页 获取此信息并使用CSS等对其进行大量设计

所以基本上我需要在处理完第2页并使用来自Page 1模型的信息后保存第2页。

提前致谢!

1 个答案:

答案 0 :(得分:1)

要将非静态页面呈现为pdf,您需要使用ViewModel将页面呈现为字符串,然后转换为pdf:

首先,在静态类中创建一个方法RenderViewToString,可以在Controller中引用:

public static class StringUtilities
{
    public static string RenderViewToString(ControllerContext context, string viewPath, object model = null, bool partial = false)
    {
        // first find the ViewEngine for this view
        ViewEngineResult viewEngineResult = null;
        if (partial)
        {
            viewEngineResult = ViewEngines.Engines.FindPartialView(context, viewPath);
        }
        else
        {
            viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);
        }

        if (viewEngineResult == null)
        {
            throw new FileNotFoundException("View cannot be found.");
        }

        // get the view and attach the model to view data
        var view = viewEngineResult.View;
        context.Controller.ViewData.Model = model;

        string result = null;

        using (var sw = new StringWriter())
        {
            var ctx = new ViewContext(context, view, context.Controller.ViewData, context.Controller.TempData, sw);
            view.Render(ctx, sw);
            result = sw.ToString();
        }

        return result.Trim();
    }
}

然后,在您的控制器中:

var viewModel = new YourViewModelName
{
    // Assign ViewModel values
}

// Render the View to a string using the Method defined above
var viewToString = StringUtilities.RenderViewToString(ControllerContext, "~/Views/PathToView/ViewToRender.cshtml", viewModel, true);

然后,您可以使用ViewModel生成的视图作为可以使用其中一个库转换为pdf的字符串。

希望它有所帮助,或至少让你在路上。