【问题标题】:How to add PDF page number and total pages with CasperJs and PhantomJS如何使用 CasperJs 和 PhantomJS 添加 PDF 页码和总页数
【发布时间】:2017-10-29 12:34:54
【问题描述】:

我采用了一个网站,但我无法弄清楚。该网站使用从命令行调用的 CasperJS,它登录到该网站,然后从下载的 HTML 生成 PDF。我认为 CasperJS 将使用 PhantomJS 使用 capture() 生成 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');

谢谢

【问题讨论】:

标签: phantomjs casperjs


【解决方案1】:

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>';
    }),
  },
};

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


CasperJS

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

也就是说,在casperjs.start() 之后,PhantomJS 页面模块在casper.page 中可用。

您可以使用 casper.page.paperSize 在 CasperJS 中访问 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>';
    }),
  },
};

【讨论】:

    猜你喜欢
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2014-09-29
    • 2013-09-30
    • 2016-11-03
    • 2023-04-01
    相关资源
    最近更新 更多