Download example from github
We are excited to announce that we have just released nuget package allowing to render pdf from asp.net mvc views using jsreport platform. The idea in behind is very simple. Just grap the html that is rendered by the view, send it to jsreport server and let it transform into pdf using phantomjs.
To get started you need to install jsreport.MVC
package into your asp.net mvc
project first.
Install-Package jsreport.MVC
Then you need to add JsReportFilterAttribute
to filters collection. This require access to jsreport server. You can use .net embedded or on prem or jsreport online service.
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//when using .net embedded version you need to start server first
EmbeddedReportingServer = new EmbeddedReportingServer();
EmbeddedReportingServer.RelativePathToServer = "../App_Data";
EmbeddedReportingServer.StartAsync().Wait();
filters.Add(new JsReportFilterAttribute(EmbeddedReportingServer.ReportingService));
//when using on prem or online just instantiate ReportingService with correct url
//filters.Add(new JsReportFilterAttribute(new ReportingService("http://localhost:2000");
}
The last step is to enable particular controller or action to use jsreport for rendering. You will do this using EnableJsReport
attribute.
[EnableJsReport()]
public ActionResult Index()
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
And now you can try to visit the page and it should open a pdf instead of html.
jsreport will evaluate all your css files and even javascript. You only need to keep in mind that every resource like script or style has to be linked with absolute url.
If you want to add headers and footers to your page, look at the additional parameters of the EnableJsReportAttribute
.
For more sophisticated scenarios you can inherit from the JsReportFilterAttribute
and override RenderReport
method.
For more informations see source codes on github.