将jQuery图表转换为PDF
我找到两个我喜欢的jQuery图表插件——flot和jqPlot。我在考虑在我网站的前端使用其中一个。
不过,我还需要让用户能够将数据导出为PDF格式。我理想的情况是用纯Python来实现,但如果必要的话,也可以考虑用Java或PHP。生成的图表质量是最重要的。
我考虑过的选项有:
- 在服务器上生成图表,然后用这些图表创建PDF。我查过matplotlib和其他几个Python图表库,但那些图表看起来远没有flot或jqPlot生成的那么精美。
- 使用Rhino和Env.js在服务器上运行相同的jQuery代码,然后以某种方式捕捉生成的图表并将其插入到PDF中。用Rhino这样做可能吗?难度大吗?我见过Rhino-canvas项目,但看起来已经很过时了。
这样做的最佳方法是什么?如果我能让Rhino的方案工作,那就太好了,因为这样可以保持前端和生成的PDF之间的一致性。
3 个回答
我建议你再看看matplotlib这个工具。
它的图表可以进行很多自定义,效果看起来也很专业。虽然一开始可能会觉得选项很多有点吓人,但如果你知道怎么做,可以实现很多炫酷的效果。
比如,如果你想要阴影效果,可以看看这个变换教程。
此外,matplotlib还可以生成高分辨率的位图图像,甚至是PDF矢量图。我不太清楚使用提到的jQuery库来制作高分辨率图形有多难。
将图表转换为图片
根据我的理解,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:
最终结果
把这两者结合起来,你可能就能找到一个解决方案。