使用Rotativa将Mvc Core视图转换为pdf

时间:2017-11-23 14:00:07

标签: pdf asp.net-core-mvc rotativa

我正在开发mvc核心应用程序,我需要将视图转换为pdf。 为此,我在Rotativa.NetCore中找到NugGet Pakages

enter image description here

但它不起作用。

public class TestViewModel
    {
        public int DocId { get; set; }
        public string DocContent { get; set; }
    }

public class RotativaController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Message = string.Format("Hello to ASP.NET MVC Core!");
            return View();
        }

        //Convert Index View To PDF
        public ActionResult PrintIndex()
        {
            return new ActionAsPdf("Index");
        } //Not working.

        //Convert TestViewModel Model To PDF
        public ActionResult PrintTestViewModel()
        {
            List<TestViewModel> _list = new List<TestViewModel>();
            _list.Add(new TestViewModel { DocId = 1, DocContent = "Content 1" });
            _list.Add(new TestViewModel { DocId = 2, DocContent = "Content 2" });
            _list.Add(new TestViewModel { DocId = 3, DocContent = "Content 3" });
            _list.Add(new TestViewModel { DocId = 4, DocContent = "Content 4" });
            _list.Add(new TestViewModel { DocId = 5, DocContent = "Content 5" });
            return new ViewAsPdf(_list);
        } //Not working.
    }

通过例外

TypeLoadException: Could not load type 'Microsoft.AspNetCore.Builder.CookieAuthenticationOptions' from assembly 'Microsoft.AspNetCore.Authentication.Cookies, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.

3 个答案:

答案 0 :(得分:0)

解决方案很简单。

此时当前分支处于.NetCoreApp 1.0。

有一个拉取请求等待将.netcore更新为2.0。

一个简单的解决方法是下载解决方案,卸载项目并更新以下行:

<TargetFrameworks>netcoreapp2.0</TargetFrameworks> 

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.0" />
  </ItemGroup>

之后,重新加载项目,使用 CookieAuthenticationOptions 来解决问题,就是这样。

答案 1 :(得分:0)

CookieAuthenticationOptions类仅适用于NetCore 1.x而不适用于NetCore 2.0。

要让Rotativa.NetCore在NetCore 2.0上运行,您需要从GitHub下载Rotativa.NetCore源代码:https://github.com/aaxelm/Rotativa.NetCore,进行此处列出的更改:https://github.com/aaxelm/Rotativa.NetCore/pull/1/files?diff=split然后将此项目添加为Visual Studio中的解决方案的现有项目。

答案 2 :(得分:-1)

您必须在“索引”操作中使用[AllowAnonymous]。 否则在ActionAsPdf中设置FormsAuthenticationCookieName和Cookies属性。