You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在类库中使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:17:11