如何在类库中使用Rotativa NuGet包生成PDF文件?
在类库中用Rotativa实现视图转PDF
Rotativa的PDF生成方法依赖ControllerContext,类库环境下可以通过以下两种方式解决:
方法一:手动构造ControllerContext
类库中需先引用System.Web.Mvc和System.Web程序集,然后模拟构造上下文:
using System.Web; using System.Web.Mvc; using System.Web.Routing; public byte[] GeneratePdfFromUrl(string targetUrl) { var httpContextWrapper = new HttpContextWrapper(HttpContext.Current); var routeData = new RouteData(); var dummyController = new Controller(); var controllerContext = new ControllerContext(httpContextWrapper, routeData, dummyController); var pdfGenerator = new Rotativa.UrlAsPdf(targetUrl); return pdfGenerator.BuildFile(controllerContext); }
注意:该方法仅适用于Web环境,非Web场景下HttpContext.Current会为空,无法使用。
方法二:使用ViewAsPdf跳过完整上下文依赖
如果无法获取Web上下文,可直接用ViewAsPdf指定视图和模型,无需完整的ControllerContext:
using System.Web.Mvc; using Rotativa; public byte[] GeneratePdfFromView(string viewPath, object model) { var pdfGenerator = new ViewAsPdf(viewPath, model) { PageSize = Rotativa.Options.Size.A4, PageOrientation = Rotativa.Options.Orientation.Portrait }; // 传入空的ControllerContext即可,ViewAsPdf内部会处理必要的视图渲染逻辑 return pdfGenerator.BuildFile(new ControllerContext()); }
调用时直接传入视图的完整路径(如~/Views/Invoice/Detail.cshtml)和对应模型即可。
额外提示
- 确保类库已安装对应版本的Rotativa NuGet包(ASP.NET MVC用Rotativa,ASP.NET Core用Rotativa.AspNetCore)
- 若在非Web环境运行,建议改用不依赖Web上下文的PDF库,比如iTextSharp、PdfSharp等
内容的提问来源于stack exchange,提问作者arg
相关产品推荐
相关产品推荐

