html - WkHtmlToXSharp - System.AccessViolationException

标签 html pdf wkhtmltopdf

我在我的项目中使用 WkHtmlToXSharp 包装器库从 HTML 生成 PDF 文件。

我在不同的 PC 上多次使用这个库,突然,我遇到了以下问题:

System.AccessViolationException:试图读取或写入 protected 内存。这通常表明其他内存已损坏。 在 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(委托(delegate)方法,对象 [] 参数) 在 WkHtmlToXSharp.MultiplexingConverter.Convert()

这似乎是这个库的一个常见问题(我在网上找到了一些关于它的反馈——但是没有提供修复)。顺便说一句,就我而言,它有点随机发生。我在其他开发机器上没有遇到这个问题。我想知道是否有人有解决办法。我还想知道这是否是包装器库的问题,如果是 WkHtmlToPDF 库本身的话。

有什么建议吗?我也愿意使用另一个转换器,只要它是免费且稳定的,并且如果可能的话,不会产生新的进程。它必须在所有 Windows 版本中正常和稳定地工作,并在转换方面做得很好(要转换的 HTML 是固定的 - 包含一些图片和表格以及基本的 CSS)。

最佳答案

我建议另一种方法:直接使用 wkhtmltopdf.exe,构建您自己的包装器。如果您可以控制输入,那么它们就不是很复杂,然后您确切地知道如何更新它以及选项如何工作。我在直接使用 wkhtmltopdf 时从未遇到过这个问题(在 Win7、Win server 2008 r2、Ubuntu 和 CentOS 上)。不过,它们会为每次转换生成进程。

例如,查看 Derp class in another answer of mine关于 wkhtmltopdf。或者尝试类似下面未经测试的代码(您的真实代码会更复杂,这只是一个演示/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);
}

关于html - WkHtmlToXSharp - System.AccessViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175666/

相关文章:

javascript - PDF 转换后不显示更改的值

javascript - 表单验证检查后不显示模态框

asp.net - 生成 PDF,IE 和 HTTPS 出错

pdf-generation - wkhtmltopdf命令失败

css - 如何让 wkhtmltopdf 显示 th 和 td 背景渐变?

php - dompdf 和 img 标签,图像不会显示

html - 想要垂直对齐页面

html - 如何在django html模板中添加if函数

javascript - 如何覆盖用户选择的 HTML 颜色输入值

java - 使用变量从生成的 PDF 文档中提取文本