我在不同的PC上经常使用这个库,突然间,我遇到了以下问题:
System.AccessViolationException:尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
在WkHtmlToXSharp.WkHtmlToPdfConverter.wkhtmltopdf_convert(IntPtr转换器)
在WkHtmlToXSharp.WkHtmlToPdfConverter.Convert(String inputHtml)
在WkHtmlToXSharp.WkHtmlToPdfConverter.Convert()
在WkHtmlToXSharp.MultiplexingConverter.b_8()
—内部异常堆栈跟踪结束—
在Sanford.Threading.DelegateQueue.EndInvoke(IAsyncResult结果)
在Sanford.Threading.DelegateQueue.Invoke(委托方法,对象[] args)
在WkHtmlToXSharp.MultiplexingConverter.Convert()
这似乎是这个库的常见问题(我在网上发现了一些关于它的反馈 – 但是没有提供修复).顺便说一句,在我的情况下,它有点随机发生.我没有在其他开发机器中遇到这个问题.我想知道是否有人有解决方法.如果使用WkHtmlToPDF库本身,我也想知道这是否是包装器库的问题.
有什么建议吗?我也愿意使用另一个转换器,只要它是免费且稳定的,并且如果可能的话,不会产生新的过程.它必须在所有Windows版本中正常稳定地工作并且做一个不错的转换工作(要转换的HTML是固定的 – 包含一些图片和表格以及基本的CSS).
解决方法
有关示例,请查看有关wkhtmltopdf的Derp class in another answer of mine.或尝试类似下面未经测试的代码(您的真实代码将更复杂,这只是一个演示/ POC).
var pi = new processstartinfo(@"c:\wkhtmltopdf\wkhtmltopdf.exe"); pi.CreateNowindow = true; pi.UseShellExecute = false; pi.WorkingDirectory = @"c:\wkhtmltopdf\"; pi.Arguments = "http://www.google.com gogl.pdf"; using (var process = Process.Start(pi)) { process.WaitForExit(99999); Debug.WriteLine(process.ExitCode); }