【问题标题】:phantomjs call from node.js uing spawn does not seem to execute script从 node.js 使用 spawn 的 phantomjs 调用似乎没有执行脚本
【发布时间】:2017-08-15 12:31:35
【问题描述】:

我正在尝试从显示数据库数据的动态车把网页生成 pdf 文件。一旦我让它在我的本地机器上工作,我想将代码移动到弹性豆茎。最初调用 spawn 的代码似乎在运行,但是,对 phantomjs 的调用似乎并没有启动传递给它的脚本。只是为了确认一下,我在文件的开头添加了一个 console.log 语句,并且从未打印出来。更不用说脚本文件中的其他打印语句了。代码如下:

code that performs the spawn:
var childArgs = [
                  //'--debug=true',
                  path.join(__dirname, '../phantom/capture.js'),
                  id,
                  filename
                ];

            let child = spawn(phantomjs.path, childArgs, {detached: false});

            console.log('set up stderr.....');
            child.stderr.on('data', (data) => {
              console.log('ps stderr: ${data}');
            });

            console.log('set up stdout.....');
            child.stdout.on('data', (data) => {
              console.log('ps stdout: ${data}');
            });

            console.log('set up close.....');
            child.on('close', (code) => {
                console.log('this is a test 2.....');
                console.log(code);
                if (code !== 0){
                    let error = new Error('An error occurred while creating the current report.');
                    error.status = 500;
                    reject(error);
                }

                resolve(fname);
                return;
            });




capture.js:
console.log('we are inside....');
let os = require('os');
var system = require('system');
console.log('we are inside.... 1');
var page = require('webpage').create();
let phantom = require('phantomjs-prebuilt');
console.log('we are inside....2');
var args = system.args;
console.log('we are inside....3');

if (args.length === 1) {
  phantom.exit(0);
} else {
    page.viewportSize = { width: 2000, height: 800 };
//page.paperSize = { format: 'Letter', orientation: 'landscape', margin: '1cm' };
page.paperSize = { width: '1280px', height: '800px', margin: '0px' };
page.settings.localToRemoteUrlAccessEnabled = true;
page.settings.loadImages = true;
page.settings.javascriptEnabled = true;

let done = false;
//"http://example.com/order/" + args[1] + '?token=' + args[2]
page.open("http://example.com/order/" + args[1], function start(status) {
  if (status === "success"){
      page.render(os.tmpdir() + '/' + args[2], { format: 'pdf' });
  }

  done = true;
});

var intervalId = setInterval(function(){
    if (done){
        phantom.exit();
    } 
}, 100);
}

我不知道问题出在哪里。 capture.js 的第一行似乎没有被调用。 1)我错过了什么问题? 2) 我该如何解决?

【问题讨论】:

    标签: node.js phantomjs pdf-generation


    【解决方案1】:

    问题可能是出于安全原因,PhantomJS 无法使用带点的路径运行 capture.js。例如,尝试从当前目录运行 capture.js。

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 2011-01-21
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      相关资源
      最近更新 更多