Once you try to work to generate the PDF using Rotativa, you may face the error that I faced. It ruined my whole day. I hope somehow you people save time.
The error which you may see.
Unhandled Execution Error
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Exception:
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[Exception]
Rotativa.WkhtmltopdfDriver.Convert(String wkhtmltopdfPath, String switches, String html) +1364
Rotativa.WkhtmltopdfDriver.ConvertHtml(String wkhtmltopdfPath, String switches, String html) +70
Rotativa.ViewAsPdf.CallTheDriver(ControllerContext context) +1986
Rotativa.AsPdfResultBase.BuildPdf(ControllerContext context) +380
Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext context) +69
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +109
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +890
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +97
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +241
System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +19
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +111
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288
While generating the pdf you may see this error. There are some basic steps you have to follow to remove this error.
Step 1. Try to install "Visual C++ Redistributable Packages" You may find those packages in the Microsoft site, very easily.
Note. If your production server won't allow you to install this package then find (MSVCP120.dll)
Step 2. Once you have used the Rotativa pdf form Nuget packaged manager you must have got some executable inside it. as shown in the below image
Step 3. If you try to use this application to execute itself and test the error you are facing while creating the pdf, try this way, the actual error you will get.
c:\inetpub\wwwroot\DummyProject\Rotativa\wkhtmltopdf.exe d:\Pdf\Dummy.html d:\Pdf\Dummy.pdf
After executing this line of code either you will get a fresh pdf file or MSVCP120.dll missing error.
Step 4. This is the final stage you have to only place that dll inside the Rotativa folder which you are hosted in the IIS. If you are enable to execute the Visual C++ Redistributable Packages in the production server, no need to worry, Only just place "MSVCP120.dll" inside the Rotative folder. This will work fine.
Summary
This article explains a common bug, when we try to upload our website to the production server and we have used the Rotativa dll, this error might occur. On this issue, this method works.