页面.pdf与PhantomJS

我正在使用PhantomJS将可变高度的网页导出为pdf。 由于pdf可以具有任何页面大小(更像是比率,因为它是矢量的),所以我想以一种可以在pdf中创建单个页面的方式导出它,以适合整个网页。

幸运的是,使用evaluate PhantomJS方法,我可以轻松检测页面高度

page.includeJs('jquery.js', function() {
  var pageHeight = page.evaluate(function() {
    return $('#content').height();
  });
});

但是,我不确定我如何使用这些对我有利。 viewportSize似乎没有任何影响,因为我没有渲染视口,而是整个文档。 我将它设置为一个固定的{width: 800, height: 800}

所以我无法将我的头围绕paperSize大小。 设置高度返回pageHeight将呈现1.5x页面,所以我试着调整宽度,但它并没有真正加起来,我可以理解的任何公式。

有关如何实现此目的的任何想法,或者您是否对paperSize属性与从页面呈现的像素大小的边界之间的关联有更深入的了解


扩展Cyber​​maxs的答案,我补充道

  • 设定一个固定宽度(36厘米对应我的观点港口)和
  • 一个单位的高度计算
  • 将边距设置为0px。
  • 我无法给出一个很好的解释,但它适用于我。

    完整的脚本:

    var page = require('webpage').create(),
    system = require('system'),
    address, output, size;
    
    if (system.args.length < 3 || system.args.length > 5) {
        console.log('Usage: screenshot.js <URL> <filename>');
        phantom.exit(1);
    } else {
        address = system.args[1];
        output = system.args[2];
        page.viewportSize = { width: 1280, height: 900};
        page.open(address, function (status) {
            if (status !== 'success') {
                console.log('Unable to load the address!');
                phantom.exit();
            } else {
                window.setTimeout(function () {
                    page.includeJs("//code.jquery.com/jquery-1.10.1.min.js", function() {
                        var size = page.evaluate(function () {
                            return {width: width = "36cm", height : $(document).height()*2+400 + "px", margin: '0px' };
                        });
                        page.paperSize = size;          
                        page.render(output);
                        phantom.exit();
                    });
                }, 400);
            }
        });
    }
    

    viewportSize模拟传统浏览器中的窗口大小。 它由于HTML布局而影响页面的呈现,但不直接影响PDF呈现。

    使用page.papersize在以PDF格式呈现时定义网页的大小。 使用一些Jquery,很容易将网页呈现在单个文档中,如下所示:

    var page = require('webpage').create(),
        system = require('system'),
        address, output;
    
    if (system.args.length != 3) {
        console.log('Usage: spdf.js URL filename');
        phantom.exit(1);
    } else {
        address = system.args[1];
        output = system.args[2];
        page.viewportSize = { width: 600, height: 600 };
    
        page.open(address, function (status) {
            if (status !== 'success') {
                console.log('Unable to load the address!');
                phantom.exit();
            } else {
                var size = page.evaluate(function () {
                    return {width: width = $(document).width(), height : $(document).height() };
                });
    
                page.paperSize = size;
    
                page.render(output);
                phantom.exit();
            }
        });
    }
    
    链接地址: http://www.djcxy.com/p/73861.html

    上一篇: page .pdf with PhantomJS

    下一篇: How to assign a 1D numpy array to 2D numpy array?