我无法使Highcharts phantomJs导出服务器工作

时间:2013-07-04 09:57:40

标签: highcharts export phantomjs

提前非常感谢。

我想设置一个phantomjs Highcharts导出服务器。它应该接受json选项作为输入和输出jpeg图像文件。

以下是我的工作:

  1. 我从此repo下载服务器端js代码:https://github.com/highslide-software/highcharts.com/tree/master/exporting-server/phantomjs
  2. 我下载了phantomjs 1.6.0
  3. 运行

    phantomjs highcharts-convert.js -host 127.0.0.1 -port 3001
    
  4. 然后我尝试在此站点中使用客户端代码:http://export.highcharts.com/demo来发送请求。我更改了表单操作URL:

        <form id="exportForm" action="./" method="POST">
    

    到此:

        <form id="exportForm" action="http://0.0.0.0:3001" method="POST">
    

    并单击“Highcharts配置对象(JSON)”。我得到的就是这条消息:

      

    渲染失败:   SyntaxError:无法解析JSON字符串

    由于可以在Highcharts服务器中正确处理相同的请求,因此错误必须位于我正在使用的Highcharts服务器端js代码中。我也尝试了以下命令:

    phantomjs highcharts-convert.js -infile options.js \
                                    -outfile chart.png -scale 2.5 -width 300
    

    将此代码放在options.js

    {
      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]
                    }]
              },
              callback: function(chart){
              chart.renderer
                   .arc(200,150,100,50,-Math.PI,0)
                   .attr({fill:'#FCFFC5',stroke:'black','stroke-width':1})
                   .add();
              },
     constr: "Chart",
     outfile: "//tmp//chart.png"
    }
    

    它会成功生成png。

    我猜Highchart没有在导出函数中做太多工作,我在highcharts-convert.js文件中发现了一些拼写错误。谁可以帮我这个事?非常感谢。

4 个答案:

答案 0 :(得分:6)

我终于解决了这个问题。我想在所谓的“JSON”字符串中存在误解。 Javascript导出服务器不接受任何真正的“JSON”字符串。一个真正的“JSON”字符串将引用所有字符串,有些像

 {
       "value": [1,2,3],
       "name": "jack"
 }

导出服务器接受的实际上是用于创建Javascript对象的 Javascript代码,如:

 {
       value: [1,2,3],
       name: "jack"
 }

这是因为服务器将使用此字符串作为生成的网页中的Javascript代码的一部分。我写了一个小函数来将JSON字符串转换为这种格式并将其传递给服务器,它最终有效。

var getUnQuotedJsonString = function (str) {
  return str.replace(/"\w+":/g, function(s, key) {
    return s.replace(/"/g, "");
  });
}

答案 1 :(得分:0)

当我尝试发送的JSON字符串比托管highcharts导出器WAR文件的服务器接受的时间更长时,我收到了同样的错误。检查服务器中的消息长度参数。确保它足够长以保存发送的请求。现在,既然你没有提到你正在使用的导出服务器(java或PHP),我想你实际上并没有为导出服务器设置web前端,你只需设置无头命令行导出(phantomJS + some) highcharts js文件)。要使用导出服务器在前端使用(例如,当用户点击网页上的导出按钮时),您还需要设置JavaPHP

答案 2 :(得分:-1)

这是因为

启动的Phantoms HTTP服务器
phantomjs highcharts-convert.js -host ... -port ...

期望参数以JSON格式发送。请阅读documentation,parapgraph '作为网络服务器开始'

出于好奇......你发现了什么拼写错误?

答案 3 :(得分:-1)

如果有人想要从json_encode -

的结果中删除引号,我写了一个类似的函数来为PHP解决这个问题
function unQuote($str){
return preg_replace_callback('/"\w+":/',
                        function ($match){
                             return str_replace('"', '', $match[0]);
                         }, 
                         $str );
}