7

PhantomJS を使用して、可変高さの Web ページを pdf にエクスポートしています。PDFは任意のページサイズを持つことができるので(ただし、ベクトルであるため比率に似ています)、Webページ全体に収まる単一のページをPDFに作成する方法でエクスポートしたいと思います。

幸いなことに、evaluatePhantomJS メソッドを使用すると、ページの高さを簡単に検出できます。

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

しかし、それをどのように自分の利益のために使用できるかはわかりません。viewportSizeビューポートではなくドキュメント全体をレンダリングしているため、これにはまったく影響がないようです。固定にしました{width: 800, height: 800}

paperSizeだから私はサイズに頭を包むことができません。返された pageHeight に高さを設定すると 1.5 倍のページがレンダリングされるため、幅を微調整してみましたが、理解できる式にはなりません。

paperSizeこれを達成する方法についてのアイデア、またはプロパティとページからレンダリングされたピクセルサイズの境界との間の相関関係についてさらに洞察がありますか

4

2 に答える 2

1

viewportSize は、従来のブラウザのようにウィンドウのサイズをシミュレートします。HTML レイアウトが原因でページのレンダリングに影響しますが、直接の pdf レンダリングには影響しません。

page.papersizeを使用して、PDF としてレンダリングするときの Web ページのサイズを定義します。少しの Jquery を使用すると、次のように Web ページを 1 つのドキュメントに簡単にレンダリングできます。

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();
        }
    });
}
于 2013-08-26T07:23:34.467 に答える