WkHtmlToXSharp – System.AccessViolationException

我在我的项目中使用Wk HtmlToXSharp包装器库从HTML生成PDF文件.

我在不同的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.exe,构建自己的包装器.如果您可以控制输入,那么它们并不是很复杂,然后您就知道如何更新它以及选项如何工作.我直接使用wkhtmltopdf时遇到过这个问题(在Win7,Win server 2008 r2,Ubuntu和CentOS上).它们确实为每次转换产生了进程.

有关示例,请查看有关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);
}

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些