Rotativa-Wkhtmltopdf已停止工作

时间:2018-07-24 10:30:53

标签: asp.net-mvc wkhtmltopdf rotativa

当尝试在ASP.NET MVC应用程序中使用Rotativa生成一些PDF时,出现以下异常(没有实际消息,只有堆栈跟踪)。

  

System.Exception,位于Rotativa.WkhtmltopdfDriver.Convert(String   wkhtmltopdfPath,字符串开关,字符串html)位于   Rotativa.WkhtmltopdfDriver.ConvertHtml(String wkhtmltopdfPath,String   开关,字符串html)在   Rotativa.ViewAsPdf.CallTheDriver(ControllerContext上下文)位于   Rotativa.AsPdfResultBase.BuildPdf(ControllerContext上下文)位于   Rotativa.AsPdfResultBase.ExecuteResult(ControllerContext上下文)
  在   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext   controllerContext,ActionResult actionResult)位于   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList 1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList 1   过滤器,Int32 filterIndex,ResultExecutingContext preContext,   ControllerContext controllerContext,ActionResult actionResult)位于   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList 1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1个过滤器,ActionResult actionResult)位于   System.Web.Mvc.Async.AsyncControllerActionInvoker。<> c__DisplayClass21。<> c__DisplayClass2b.b__1c()   在   System.Web.Mvc.Async.AsyncControllerActionInvoker。<> c__DisplayClass21.b__1e(IAsyncResult   asyncResult)   System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End()   在   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult   asyncResult)   System.Web.Mvc.Controller.b__1d(IAsyncResult   asyncResult,ExecuteCoreState innerState)位于   System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End()   在System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)   在System.Web.Mvc.Controller.b__15(IAsyncResult   asyncResult,控制器控制器)在   System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End()   在System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
  在   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult   asyncResult)   System.Web.Mvc.MvcHandler.b__5(IAsyncResult   asyncResult,ProcessRequestState innerState)位于   System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid 1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase 1.End()   在System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult   asyncResult)   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult   结果)   System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤)
  在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔值和同步完成)

此问题与缺少Visual Studio 2013的C ++可再发行组件包(MSVCP120.dll)无关,因为它们已安装在计算机上。 实际上,可以通过该应用程序生成一些PDF,这使我认为视图中有些东西有时会导致Wkhtmltopdf停止工作...

关于导致此异常的原因或如何调试的任何想法?

(Rotativa版本是1.6.4,我正在使用MVC5)

1 个答案:

答案 0 :(得分:0)

经过多次试验和错误,我找到了解决方案。这个question也为我指明了正确的方向。 wkhtmltopdf分页算法以及大型表或HTML块显然是一个问题。因此,为了解决我的问题,我将HTML更改为较小的块,现在可以使用了。