HighCharts导出服务器无法创建图像

时间:2013-08-30 16:02:10

标签: highcharts phantomjs

我安装了phantomjs(使用npm -g选项)并从github目录中复制了相关的高图文件。这是目录列表的样子 - 我chmod / chown'd一切都是大开的,以防出现问题

drwxrwxrwx 2 www-data www-data   4096 2013-08-30 15:01 ./
drwxr-xr-x 9 root     root       4096 2013-08-29 18:11 ../
-rwxrwxrwx 1 www-data www-data    183 2013-08-30 13:43 callback.js*
-rwxrwxrwx 1 www-data www-data   4436 2013-08-30 13:34 data.js*
-rwxrwxrwx 1 www-data www-data  15464 2013-08-30 13:34 highcharts-convert.js*
-rwxrwxrwx 1 www-data www-data 139290 2013-08-30 13:34 highcharts.js*
-rwxrwxrwx 1 www-data www-data  21781 2013-08-30 13:34 highcharts-more.js*
-rwxrwxrwx 1 www-data www-data 173186 2013-08-30 13:34 highstock.js*
-rwxrwxrwx 1 www-data www-data  92629 2013-08-30 13:34 jquery.1.9.1.min.js*
-rwxrwxrwx 1 www-data www-data    223 2013-08-30 13:55 options1.json*
-rwxrwxrwx 1 www-data www-data   3249 2013-08-30 13:34 readme.md*

命令行按预期工作:

phantomjs highcharts-convert.js -infile options1.json -outfile chart1.png -scale 2.5 -width 300 -constr Chart -callback

创建chart1.png - 它看起来像我期望的那样。我可以使用此命令启动Web服务器

phantomjs highcharts-convert.js -host 0.0.0.0 -port 8080
  
    

好的,PhantomJS准备好了。

  

我创建了一个简短的js来发送帖子数据

var p ={"infile":"{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]}]};","outfile":"test1.png","constr":"Chart"}
console.log('success');
    data=JSON.stringify(p);
$.ajax({
type: 'POST',
data: data,
url: 'http://myip:8080',    
success: function(data) {
    console.log('success');

    }
});

这将返回200代码,但不会向浏览器返回任何数据。我在highcharts-convert.js = console.log(msg)中取消注释第107行;

所以我得到了这个输出

Highcharts.options.parsed
Highcharts.customCode.parsed
Highcharts.images.loaded

但没有我能找到的图片。想法?

修改

Curl正在运作

curl -H "Content-Type: application/json" -X POST -d '{"infile":"{xAxis: {},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]}]};","constr":"Chart","outfile":"/var/www/node/image/chart.png"}' 127.0.0.1:8080

除了我得到一个base64字符串而不是保存图像的脚本。我从这里得到了卷曲的部分:http://www.highcharts.com/component/content/article/2-news/56-improved-image-export-with-phantomjs

3 个答案:

答案 0 :(得分:1)

PhantomJS可以制作图像并在本地保存,但不支持文件下载。这就是它返回图像的64字符串表示的原因。

答案 1 :(得分:1)

highcharts-convert.js脚本经历了一些变化。在servermode中运行脚本时指定outfile参数时,将在服务器上创建一个文件。该脚本返回服务器上的文件位置。这可以发送给客户端,因此可以从客户端触发下载。

使用async参数的Java highcharts export-server促进了上述内容。

了解更多here

我认为这可能是另一种解决方案

答案 2 :(得分:0)

我选择使用php / batik解决方案,我仍然希望将来能够使用此解决方案。

注意,下载到教程中列出的蜡染 http://xmlgraphics.apache.org/batik/#download http://xmlgraphics.apache.org/batik/download.cgi 导致403页,可能考虑在其他地方链接?我在页面上使用了谷歌缓存。