在服务器上呈现客户端图表

Rendering client side charts on the server

我正在开发的产品在 HTML5 仪表板上有一些漂亮的图表。使用 Flot 在 Javascript 中呈现图表。

用户希望此仪表板按固定的时间表每天以 PDF 报告的形式通过电子邮件发送给他们。因此,例如,他们希望每天早上 8 点通过电子邮件将电子邮件发送给他们。

我想过使用 Python 的 Requests (i.e. do a request.get) to get the HTML5 source of the page and then convert the resulting HTML5 page to PDF using Weasyprint 但这显然行不通。

Javascript 图表是最令人头疼的问题,因为除非在具有良好 Javascript 支持的浏览器中查看,否则它们不会呈现,因此概述的方法不会呈现 Javascript 图。

将动态生成的 HTML5 页面转换为 PDF 的推荐方法是什么?其他人是怎么做到的?

PhantomJS 是解决方案。这是一个无头的 WebKit 实现,允许我们将带有 Javascript 图表和所有内容的仪表板呈现为 PDF。

我现在设置了一个批处理作业,每天 运行 将我们的仪表板转换为 PDF 文档,然后通过电子邮件发送给用户。

附录

其他一些需要注意的事情。在当前的 PhantomJS 2.1 版本中,存在一个导致 PDF 裁剪的错误。修复计划在 2.2 中进行。 bug report 中详述的临时解决方法是设置文档的 CSS 缩放级别。以下 CSS 片段适合我。

html {
    zoom: 50%;
}