Rotativa 无法在空引用 asp.net 核心上执行运行时绑定
Rotativa Cannot perform runtime binding on a null reference asp.net core
问题
我正在尝试使用 Rotativa 在 asp.net 核心中创建 pdf,但它抛出了一个错误。
我想创建 html 并将其转换为 pdf,然后存储在服务器目录中
错误
代码
[HttpPost]
public IActionResult Index(Invoice invoice)
{
var webRoot = _env.WebRootPath;
var pdf = new ViewAsPdf("Index")
{
FileName = "Test.pdf",
PageSize = Rotativa.AspNetCore.Options.Size.A4,
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageHeight = 20,
};
var byteArray = pdf.BuildFile(ControllerContext).Result;
//var fileStream = new MemoryStream(Path.Combine(webRoot, pdf.FileName), FileMode.Create, FileAccess.Write);
var memoryStream = new MemoryStream(byteArray, 0, byteArray.Length);
}
回答
该错误表明您尚未配置 Rotativa。
像这样配置您的应用程序:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
Rotativa.AspNetCore.RotativaConfiguration.Setup(env);
}
也像这样将 wkhtmltopdf.exe
添加到 wwwroot:
wwwroot
Rotativa
wkhtmltopdf.exe
完成后,以下内容将起作用。
public async Task<IActionResult> Index()
{
var pdf = new Rotativa.AspNetCore.ViewAsPdf("Index")
{
FileName = "C:\Test.pdf",
PageSize = Rotativa.AspNetCore.Options.Size.A4,
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageHeight = 20,
};
var byteArray = await pdf.BuildFile(ControllerContext);
return File(byteArray, "application/pdf");
}
注意使用 async/await
而不是 .Result
。
另请参阅:
GitHub 此处演示 https://github.com/shaunluttin/asp-net-core-rotativa-pdf
在此处下载 wkhtmltopdf https://wkhtmltopdf.org/
问题
我正在尝试使用 Rotativa 在 asp.net 核心中创建 pdf,但它抛出了一个错误。 我想创建 html 并将其转换为 pdf,然后存储在服务器目录中
错误
代码
[HttpPost]
public IActionResult Index(Invoice invoice)
{
var webRoot = _env.WebRootPath;
var pdf = new ViewAsPdf("Index")
{
FileName = "Test.pdf",
PageSize = Rotativa.AspNetCore.Options.Size.A4,
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageHeight = 20,
};
var byteArray = pdf.BuildFile(ControllerContext).Result;
//var fileStream = new MemoryStream(Path.Combine(webRoot, pdf.FileName), FileMode.Create, FileAccess.Write);
var memoryStream = new MemoryStream(byteArray, 0, byteArray.Length);
}
回答
该错误表明您尚未配置 Rotativa。
像这样配置您的应用程序:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
Rotativa.AspNetCore.RotativaConfiguration.Setup(env);
}
也像这样将 wkhtmltopdf.exe
添加到 wwwroot:
wwwroot
Rotativa
wkhtmltopdf.exe
完成后,以下内容将起作用。
public async Task<IActionResult> Index()
{
var pdf = new Rotativa.AspNetCore.ViewAsPdf("Index")
{
FileName = "C:\Test.pdf",
PageSize = Rotativa.AspNetCore.Options.Size.A4,
PageOrientation = Rotativa.AspNetCore.Options.Orientation.Portrait,
PageHeight = 20,
};
var byteArray = await pdf.BuildFile(ControllerContext);
return File(byteArray, "application/pdf");
}
注意使用 async/await
而不是 .Result
。
另请参阅:
GitHub 此处演示 https://github.com/shaunluttin/asp-net-core-rotativa-pdf
在此处下载 wkhtmltopdf https://wkhtmltopdf.org/