如何使用CasperJs和PhantomJS

时间:2017-10-29 12:34:55

标签: phantomjs casperjs

我已经采用了一个网站,我无法解决问题。该网站使用从命令行调用的CasperJS,该命令行登录到站点,然后从下载的HTML生成PDF。我认为CasperJS将使用Capture()将PhantomJS用于PDF生成。

我需要将页码和总页数添加到PDF中。所以第1页,共5页。但我在网上找不到任何关于如何使用CasperJS和PhantomJS的细节。可能吗?

下载过程在服务器上创建以下JS文件,如下所示:

var casper = require('casper').create({
    verbose: false,
    logLevel: 'debug',
    userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22',
    pageSettings: {
        loadImages:  true,
        loadPlugins: true
    },

});

var url = '{$siteurl}';

casper.start(url, function() {

    this.page.paperSize = {
        width: '11in',
        height: '8.5in',
        orientation: 'landscape',
        border: '0.1in'
    };

    this.fill('form#loginform', {
        ident: 'username',
        password: 'password'
    }, true);
});

var url = '{$siteurl}/pdf/{$twigDate}/{$clubId}/{$sessionId}';

casper.then(function() {

    casper.start(url, function() {

        this.capture('{$genPdf}');

    });
});

casper.run();

然后使用以下命令调用上述文件:

$exe = shell_exec('/usr/bin/casperjs --ignore-ssl-errors=true --ssl-protocol=any ' . INC_ROOT . '/pdf/registers/' . $filename . ' 2>&1');

由于

1 个答案:

答案 0 :(得分:0)

PhantomJS

PhantomJS有一个paperSize属性,用于定义以PDF格式呈现时网页的大小。

paperSize属性具有headerfooter子属性,允许重复页眉和页脚。

PhantomJS提供了关于如何完成此任务的以下example

var webPage = require('webpage');
var page = webPage.create();

page.paperSize = {
  width: '8.5in',
  height: '11in',
  header: {
    height: '1cm',
    contents: phantom.callback(function (pageNum, numPages) {
      return '<h1>Header <span style="float:right">' + pageNum + ' / ' + numPages + '</span></h1>';
    }),
  },
  footer: {
    height: '1cm',
    contents: phantom.callback(function (pageNum, numPages) {
      return '<h1>Footer <span style="float:right">' + pageNum + ' / ' + numPages + '</span></h1>';
    }),
  },
};
  

注意:可以在printheaderfooter.js文件夹的examples中找到更详细的示例。

CasperJS

CasperJS允许您使用page选项访问现有的PhantomJS WebPage实例。

换句话说,在casperjs.start()之后,casper.page中可以使用PhantomJS页面模块。

您可以使用paperSize访问CasperJS中的casper.page.paperSize属性。

casper.page.paperSize = {
  width: '8.5in',
  height: '11in',
  header: {
    height: '1cm',
    contents: phantom.callback(function (pageNum, numPages) {
      return '<h1>Header <span style="float:right">' + pageNum + ' / ' + numPages + '</span></h1>';
    }),
  },
  footer: {
    height: '1cm',
    contents: phantom.callback(function (pageNum, numPages) {
      return '<h1>Footer <span style="float:right">' + pageNum + ' / ' + numPages + '</span></h1>';
    }),
  },
};