将jQuery图表转换为PDF

8 投票
3 回答
3769 浏览
提问于 2025-04-16 03:08

我找到两个我喜欢的jQuery图表插件——flot和jqPlot。我在考虑在我网站的前端使用其中一个。

不过,我还需要让用户能够将数据导出为PDF格式。我理想的情况是用纯Python来实现,但如果必要的话,也可以考虑用Java或PHP。生成的图表质量是最重要的。

我考虑过的选项有:

  • 在服务器上生成图表,然后用这些图表创建PDF。我查过matplotlib和其他几个Python图表库,但那些图表看起来远没有flot或jqPlot生成的那么精美。
  • 使用Rhino和Env.js在服务器上运行相同的jQuery代码,然后以某种方式捕捉生成的图表并将其插入到PDF中。用Rhino这样做可能吗?难度大吗?我见过Rhino-canvas项目,但看起来已经很过时了。

这样做的最佳方法是什么?如果我能让Rhino的方案工作,那就太好了,因为这样可以保持前端和生成的PDF之间的一致性。

3 个回答

1

你可以在服务器上用Python和Qt运行一个叫做无头webkit的渲染引擎,然后把它打印成PDF。为了用Qt打印PDF,你需要做的一些修改可以在这里找到,不过这些信息可能不完全。

这个方法只会把页面渲染出来,你可以把图表单独保存为图片,或者按照建议的方式生成整个页面的PDF。

1

我建议你再看看matplotlib这个工具。

它的图表可以进行很多自定义,效果看起来也很专业。虽然一开始可能会觉得选项很多有点吓人,但如果你知道怎么做,可以实现很多炫酷的效果。

比如,如果你想要阴影效果,可以看看这个变换教程

此外,matplotlib还可以生成高分辨率的位图图像,甚至是PDF矢量图。我不太清楚使用提到的jQuery库来制作高分辨率图形有多难。

4

将图表转换为图片

根据我的理解,flot 是在画布元素上绘图的(如果有的话)。我在网上搜索了关于导出画布内容的例子,找到了一个叫 canvas2image 的工具。这可能是一个值得尝试的方向,也可能不是。

你也可以看看这个 StackOverflow 问题。从那个问题来看,导出图片可能很简单(可以使用 Canvas.ToDataUrl(type),这个方法需要一个 MIME 类型。不过,我很确定它对 application/pdf 这种类型不会有什么实际作用……)。

更新:好吧,看看这里,canvas2image 的一个修改版本在 flotr 的源代码中:http://flotr.googlecode.com/svn/trunk/flotr/flotr/prototype/lib/canvas2image.js

生成 PDF

有一些解决方案可以在客户端使用 JavaScript 生成 PDF:

最终结果

把这两者结合起来,你可能就能找到一个解决方案。

撰写回答