nodejs搭配phantomjs highcharts后台生成图表

简单分享一下,后台使用nodejs结合highcharts、phantomjs生成报表图片的方法。这主要应用在日报邮件。

主要参考以下资料:

关键是使用phantomjs模拟浏览器环境,这个是一个绿色的程序,无需安装。win7和64bit linux上亲测ok。

然后,大概我们需要部署一个类似这样的环境(代码地址 https://github.com/kenkozheng/HTML5_research/tree/master/NodeJS-Highcharts ):


phantomjs是linux版,phantomjs.exe就是windows版。

那么在windows下,我们可以写:

var process = require("child_process");
process.exec(‘phantomjs.exe ./highcharts/highcharts-convert.js -infile options1.json -outfile chart1.png -constr Chart‘, {cwd: ‘./‘}, function (err, stdout, stderr) {
    console.log(err, stdout, stderr);
});

options1.json就是我们配置的数据。
需要注意的是,到了linux下,需要改为exec(‘./phantomjs …. 。 当然,熟悉linux的同学都可以忽略我说的废话了。

当然,为了更方便使用,稍稍修改一下highcharts-convert.js,增加一个input参数,直接传入数据,而不需要读文件。

为了避免空格引号什么的问题,这里encode一下。

          for (i = 0; i < system.args.length; i += 1) {
               if (system.args[i].charAt(0) === ‘-‘) {
                    key = system.args[i].substr(1, i.length);
                    if (key === ‘infile‘ || key === ‘callback‘ || key === ‘dataoptions‘ || key === ‘globaloptions‘ || key === ‘customcode‘) {
                         // get string from file
                         try {
                              map[key] = fs.read(system.args[i + 1]).replace(/^\s+/, ‘‘);
                         } catch (e) {
                              console.log(‘Error: cannot find file, ‘ + system.args[i + 1]);
                              phantom.exit();
                         }
                    } else if(key === ‘input‘){
                    map[‘infile‘] = decodeURIComponent(system.args[i + 1]);     //这里是修改的部分
                } else {
                    map[key] = system.args[i + 1];
                }
               }
          }

修改后就可以这么玩了:

var process = require("child_process");
var data = {
    xAxis: {
        categories: [‘Jan‘, ‘Feb‘, ‘Mar‘, ‘Apr‘, ‘May‘, ‘Jun‘,
            ‘Jul‘, ‘Aug‘, ‘Sep‘, ‘Oct‘, ‘Nov‘, ‘Dec‘]
    },
    series: [{
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0,
            135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
    }]
};
process.exec(‘phantomjs.exe ./highcharts/highcharts-convert.js -input ‘ + encodeURIComponent(JSON.stringify(data)) + ‘ -outfile chart1.png -constr Chart‘, {cwd: ‘./‘}, function (err, stdout, stderr) {
    console.log(err, stdout, stderr);
});

另外,在linux下,还可能遇到生成图片后,字体无法显示的问题。


到/usr/share/fonts/里边补回相应的字体文件即可(可以直接把windows的复制过去)。
复制过去后,需要fc -cache -fv一下,刷新一下系统的字体缓存。

时间: 2024-12-18 22:36:41

nodejs搭配phantomjs highcharts后台生成图表的相关文章

highcharts 结合phantomjs纯后台生成图片系列二之php2

上篇文章中介绍了phantomjs的使用场景,方法. 本篇文章详细介绍使用php,highcharts 结合phantomjs纯后台生成图片.包含一步步详细的php代码 一.highcharts 结合phantomjs纯后台生成图片系列的准备: 下载phantomjs解析插件,从highcharts官方下载所需插件. 新建一个工程文件夹phantomjs,所必备的js文件有: highcharts 结合phantomjs纯后台生成图片系列二之php 其中jquery.js为 v1.7.1; hi

highcharts 结合phantomjs纯后台生成图片系列二之php

上篇文章中介绍了phantomjs的使用场景,方法.本篇文章详细介绍使用php,highcharts 结合phantomjs纯后台生成图片. 一.准备: 下载phantomjs解析插件,从 highcharts官方 下载所需插件. 新建一个工程文件夹名位:phantomjs,所必备的js文件有: 其中jquery.js为v1.7.1; highcharts-convert.js的下载地址可去 github上下载 . highcharts官方文档有关于highcharts-convert.js的使

Highcharts使用二维数组生成图表

二维数组是更为灵活的一种数据存储方式.在Highcharts中,可以使用配置项column和rows二维数组.对于使用columns构建的二维数组,Highcharts会按照列从上向下读取每个x值的节点y值.而从第二行开始,每行是一个数据列,并且开始的第一个元素是数据列名.其构成的二维数组结构如下: [ [null,   x值1, x值2, x值3, -, x值n], [数据列名1, y值1, y值2, y值3, -, y值n], [数据列名2, y值1, y值2, y值3, -, y值n,],

前端生成图表

1.常用的前端生成图表的工具HighCharts和echarts 2.具体内容可参考官方文档,有一些具体实例,JS和HTML的代码都存在,还可以编辑代码 3.具体的设置还可以参考官方文档 4.使用样例: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script src=&qu

Highcharts纯js图表库,以后可以跟客户说,你跟阿里云ECS用的图表库是同款

Highcharts是一款纯javascript编写的图表库,能够很简便的在Web网站或Web应用中添加交互性的图表,Highcharts目前支持直线图.曲线图.面积图.柱状图.饼图.散点图等多达18种不同类型的图表,可以满足常用的Web图表需求 ! 近来维护我的阿里云服务器,进入后台偶然发现阿里云管理后台数据图表用的也是Highcharts,刚好正需要WEB端展示数据的东西,研究哈… Highcharts官网:http://www.highcharts.com Highcharts中文站:ht

Highcharts构建加权平均值图表

加权平均值图表是将图表中多个数据列值.依据加权算法计算获取平均值,并加入生成一个加权折线.在这里,我们直接使用第三方插件Dynamic Weighted Average实现该功能.因为该图表须要额外加入数据,所以这里以某工厂产品商品价钱为例进行解说. 生成效果例如以下: 加权平均值图表 PS:该内容已经增加<网页图表Highcharts实践教程图表篇>v1.2.2中.

使用ichartjs生成图表

官网:http://www.ichartjs.com/ ichartjs 是一款基于HTML5的图形库.使用纯javascript语言, 利用HTML5的canvas标签绘制各式图形. ichartjs致力于为您的应用提供简单.直观.可交互的体验级图表组件.是WEB/APP图表展示方面的解决方案 .如果你正在开发HTML5的应用,ichartjs正好适合您. ichartjs目前支持饼图.环形图.折线图.面积图.柱形图.条形图.ichartjs是基于Apache License 2.0协议的开源

ajax加一般处理程序或ASP.NET 后台生成带着二维码的图片

ajax加一般处理程序生成带着二维码的图片 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head

python接口自动化测试(十一)-写入excel(xlswriter)--生成图表

一.折线图: # -*- coding:utf-8 -*- import xlsxwriter # 创建一个excel workbook = xlsxwriter.Workbook("chart_line.xlsx") # 创建一个sheet worksheet = workbook.add_worksheet() # worksheet = workbook.add_worksheet("bug_analysis") # 自定义样式,加粗 bold = workb