如何在ASP.net中使用wkhtmltopdf.exe

Dav*_*och 37 c# asp.net pdf-generation wkhtmltopdf

10个小时后,尝试4个其他HTML到PDF工具,我准备爆炸了.

wkhtmltopdf听起来像是一个很好的解决方案......问题是我无法从asp.net执行具有足够权限的进程所以......

Process.Start("wkhtmltopdf.exe","http://www.google.com google.pdf");
Run Code Online (Sandbox Code Playgroud)

开始但没有做任何事情.

是否有一种简单的方法:

-a)允许asp.net启动进程(实际上可以做某事)或
-b)编译/包装/无论wkhtmltopdf.exe到我可以在C#中使用的东西,如下所示:WkHtmlToPdf.Save("http://www.google.com", "google.pdf");

小智 23

我刚开始一个新项目,在wkhtmltopdf周围提供一个C#P/Invoke包装器.

您可以在以下网址查看我的代码:https://github.com/pruiz/WkHtmlToXSharp

映入眼帘.

  • 当我使用MultiplexingConverter这样"尝试读取或写入受保护的内存时,我会收到错误.这通常表明其他内存已损坏." 有没有办法防止这个错误? (3认同)

Răz*_*nda 22

你也可以使用Pechkin

.NET Wrapper for WkHtmlToPdf DLL,使用Webkit引擎将HTML页面转换为PDF的库.

Nuget包:

Pechkin.Synchronized

Pechkin


Bol*_*der 16

感谢Paul,我找到了Codaxy编写的好包装器,也可以通过NuGet轻松下载.

经过几次试验,我已经管理了这个MVC动作,立即创建并将PDF文件作为流返回:

public ActionResult Pdf(string url, string filename)
{
    MemoryStream memory = new MemoryStream();
    PdfDocument document = new PdfDocument() { Url = url };
    PdfOutput output = new PdfOutput() { OutputStream = memory };

    PdfConvert.ConvertHtmlToPdf(document, output);
    memory.Position = 0;

    return File(memory, "application/pdf", Server.UrlEncode(filename));
}
Run Code Online (Sandbox Code Playgroud)

这里,Pdf*类已经在包装器中实现,带有一个漂亮,干净的代码,遗憾的是缺少文档.

在转换器中,URL将转换为PDF,存储在临时文件中,复制到我们作为参数提供的流中,然后删除PDF文件.

最后,我们必须将流推送为FileStreamResult.

不要忘记将输出流的位置设置为零,否则您将看到PDF文件被下载为零字节大小.