25

我们打算使用 wkhtmltopdf 将 html 转换为 pdf,但我们担心 wkhtmltopdf 的可扩展性。有谁知道它是如何扩展的?我们的网络应用程序可能会尝试转换数十万个(相对复杂的)html,所以对我们来说有一些想法很重要。有人得到这方面的任何信息吗?

4

5 回答 5

23

首先,您的问题很笼统;在询问任何项目的可扩展性时,需要考虑许多变量。显然,在一周内转换“数十万”个 HTML 文件与期望在一天或一小时内完成转换是有区别的。除此之外,“相对复杂”的 HTML 对其他人来说可能意味着不同的东西。

话虽如此,我想因为我做了类似的事情,使用 wkhtmltopdf 转换了大约 450,000 个 html 文件;我会分享我的经验。

这是我的场景:

  • 450,000 个 HTML 文件
    • 95% 的文件只有一页
    • 一般包含2张图片(相对路径,本地系统)
    • 表格数据(有时包含嵌套表)
    • 其他地方的简单标记(强、斜体、下划线等)
  • 备用台式电脑
    • 8GB 内存
    • 2.4GHz 双核处理器
    • 7200转高清

我使用了一个用 PHP 编写的简单单线程脚本来遍历文件夹并将 html 文件路径传递给 wkhtmltopdf。转换所有文件的过程大约需要 2.5 天,而且错误非常少。

我希望这能让您深入了解在 Web 应用程序中使用 wkhtmltopdf 可以得到什么。一些明显的改进来自于在更好的硬件上运行它,但主要来自利用多线程应用程序同时处理文件。

于 2012-07-25T01:59:24.930 回答
9

根据我的经验,性能很大程度上取决于你的照片。它有很多大图片,它可以显着减慢。如果可能的话,我会尝试进行测试,以估计您的服务器的负载。有些人确实将它用于密集操作,但我从未听说过数十万。我想就像所有事情一样,这取决于您的内容和资源。

以下引用直接来自wkhtmltopdf 邮件列表

我每天使用 wkHtmlToPDF 将大约 6000 封电子邮件转换为 PDF。这一切都是在具有 4GB 内存的四核服务器上完成的……这已经足够了。

有一些性能提示,但我建议在优化性能之前尝试一下你的瓶颈。例如,我记得有人说过,如果可能的话,直接从磁盘加载图像而不是在中间使用 Web 服务器可以大大加快速度。


编辑:除此之外,我在玩 wkhtmltopdf 时玩得很开心。目前在具有 4Gb 内存的 Intel Centrino 2 上,我生成包含 57 页内容(混合 p、ul、table)、约 100 张图像和 toc 持续时间小于 7 秒的 PDF。我还在运行 Visual Studio、浏览器、http 服务器和其他各种可能会减慢它的软件。我直接使用标准输入和标准输出而不是文件。


编辑:我还没有尝试过,但是如果您已链接 CSS,请尝试将其嵌入 HTML 文件中(请记住进行前后测试以正确查看效果!)。这里的改进很可能取决于缓存和提供 CSS 的位置 - 如果每次都从磁盘读取它或者上帝禁止从 scss 重新生成它,它可能会非常慢,但如果结果被网络服务器缓存(我不认为wkhtmltopdf 缓存实例之间的任何内容)它可能不会产生很大的影响。YMMV。

于 2012-07-24T09:06:13.183 回答
4

wkhtmltopdf --print-media-type正在快速燃烧。但是你会因此失去正常的 CSS 样式。

这可能不是复杂 html 页面导出的理想解决方案。但它对我有用,因为我的 html 内容非常简单并且采用表格形式。

在版本上测试wkhtmltopdf 0.12.2.1

于 2015-03-03T22:18:49.563 回答
3

我们尝试在任何实现中使用 wkhtmltopdf。我的对象是生成坐标点的巨大表格。通常我的 pdf 的体积 = 500 页

我们尝试使用 wkhtmltopdf 的端口到 .net。结果是

- Pechkin - Pro: don't need other app. Contra: slow. 500 pages generated about 5 minutes
- PdfCodaxy - only contra: slow. Slower than pure wkhtmltopdf. Required installed wkhtmltopdf. Problems with non unicode text
- Nreco - only contra: slow. Slower than pure wkhtmltopdf. Required installed wkhtmltopdf. Incorrect unlock libs after use (for me)

我们尝试使用从 C# 代码调用的二进制 wkhtmltopdf。

Pro: easy to use, faster that libs
Contra: need temporary files (cannot use Stream objects). Break with very huge (100MB+)html files as like as other libs
于 2014-09-10T11:41:42.040 回答
1

您可以创建自己的 wkhtmltopdf 引擎池。我通过直接调用 API 而不是每次都启动进程 wkhtmltopdf.exe 来实现一个简单的用例。wkhtmltopdf API 不是线程安全的,所以不容易做到。此外,您不应忘记在 AppDomain 之间共享本机代码。

于 2020-03-16T16:11:37.183 回答