I am using the latest Rotativa.NetCore assembly in a ASP.NET Core 2.1.1 project. The NuGet (https://www.nuget.org/packages/Rotativa.AspNetCore v. 1.0.6) does not work on deployment (win2016) but works locally (win10).
IIS on deployment gives 404 and the error log (stdout) shows this:
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.Exception
at Rotativa.AspNetCore.WkhtmlDriver.Convert(String wkhtmlPath, String switches, String html, String wkhtmlExe)
at Rotativa.AspNetCore.WkhtmltopdfDriver.ConvertHtml(String wkhtmltopdfPath, String switches, String html)
at Rotativa.AspNetCore.ViewAsPdf.CallTheDriver(ActionContext context)
at Rotativa.AspNetCore.AsResultBase.BuildFile(ActionContext context)
at Rotativa.AspNetCore.AsResultBase.ExecuteResultAsync(ActionContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResultFilterAsync[TFilter,TFilterAsync]()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultFilters()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.Invoke(HttpContext context)
Here is 'myproject' source
public IActionResult DownloadCertificate(int id)
{
var model = getData(id);
return new ViewAsPdf("PdfCertificate", model)
{
WkhtmlPath = "", // set the path to the Rotativa .exe files. works locally but not on deployment.
FileName = "Cert.pdf"
};
}
I have tried changing WkhtmlPath to "..\\Rotativa\\" but no luck.
Troubleshooting I found this: https://stackoverflow.com/a/48166956/560784 - apparently Rotativa is compiled against .NET Core 1.0:
There's code to update Rotativa.NetCore from .Net Core 1 to .Net Core 2.0 here: https://github.com/aaxelm/Rotativa.NetCore/pull/1/files?diff=split
So, I downloaded the Rotativa source and updated to .NET core 2.0 accordingly, referenced the new assembly. Problem persists.
I have checked permssions as well. Rotativa folder gives IIS_IUSRS execute permissions (running ApplicationPoolIdentity).
What am I missing?
My local folder structure:
c:\inetpub\myproject\myproject.dll + web.config and what not. c:\inetpub\myproject\Rotativa{wkhtmltoimage.exe, wkhtmltopdf.exe, wkhtmltox.dll}
My deployed folder structure:
c:\inetpub\sites\myproject\myproject.dll + web.config and what not. c:\inetpub\sites\myproject\wwwroot\ (static files) c:\inetpub\sites\myproject\Rotativa{wkhtmltoimage.exe, wkhtmltopdf.exe, wkhtmltox.dll}
It turns out I needed to install Microsoft Visual C++ Redistributable 2017 (x86) - download here: https://visualstudio.microsoft.com/vs/older-downloads/ or https://visualstudio.microsoft.com/downloads/
RotativaConfiguration.Setup(env, "..\\Rotativa\\"); to Startup.csCode:
public IActionResult DownloadCertificate(int id)
{
var model = getData(id);
return new ViewAsPdf("PdfCertificate", model)
{
FileName = "Cert.pdf"
};
}
I faced the same problem for my project developed with asp netcore3.1 and solved after installing "Microsoft Visual C++ Redistributable 2017 (x86)". Please make sure to install the (x86) whether your OS is x64 or x86! Thanks Sha!!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With