用node生成svg图片

最近有个需求需要后台调统计数据,直接生成图片吐到前端,本来以为比较简单的,结果中间还是遇到了很多问题:

 环境:

windows:python 2.6+,visual stdio 2008 express开发包

linux:gcc,python 2.6+ 

node版本:v0.10.35

node组件:express@3.18.6 jsdom@3.1.2 rsvg@0.2.2

本来想把node升到最新版本,在安装jsdom的时候报错,只能回退

jsdom@3支持node,更高版本只支持iojs

rsvg@0.2.5 在Red Hat 4.4.7上安装报错,rsvg@0.2.2安装成功

请求数据:

发httppost请求接口数据:

配置请求的header中Content-Length参数注意等于post数据的长度,原来没注意导致请求超时

注意header中Accept-Encoding参数是否配置了gzip,如果配置了gzip,返回时需要用zlib解压

highchart生成svg:

 最大的问题是在浏览器可以生成svg,搬到node后不能生成,经过google,参数不断的排除,发现在highchart配置一定要增加下面几个:

chart: {
margin: [50, 30, 70, 50],//不加这个显示不出来
width: 1000,
forExport: true//不加这个会报错
}

hightchart的版本使用的是v2.3.3,后台生成svg如果在图形上有标注,会显示不正常,使用最新版本会有改善。在本项目中发现使用rsvg转换png时,线宽异常,怀疑是rsvg版本太低导致的,在这个需求一定要使用rsvg转换,所以只能放弃使用最新版本的highchart

hightchart中datetime类型数据,需要加8个小时,保证显示正常,需要调整yAxis的x、y值,不然y坐标显示异常。

总结:node中模块开源,但是不同模块的版本兼容比较麻烦。后端node的模拟浏览器的的复杂展现中间可能有各种问题,碰到最麻烦的是不能调试,难以找到原因。

对于这个项目来说,可以考虑使用phantomjs解决


posted @ 2015-06-16 21:06  luke001  阅读(2830)  评论(0编辑  收藏  举报