pdf-generation – 让PhantomJS在呈现为PDF之前等待整个页面加载

当网站变得更“花哨”时,我们停止使用幻像rasterize.js http://website.com filename.pdf停止工作(空白PDF).如果我将它更改为filename.png它可以工作.

我尝试在rasterize中将此超时更改为9999,我仍然得到一个空白的PDF.默认的rasterize.js在网站切换之前正在运行.

有什么想法改变/添加到栅格化以使其再次工作?

page.open(address, function (status) {
    if (status !== 'success') {
        console.log('Unable to load the address!');
        phantom.exit();
    } else {
        window.setTimeout(function () {
            page.render(output);
            phantom.exit();
        }, 9999);
});

最佳答案 大约一年前我遇到了一些问题.对我来说(如果我没记错的话),它与@media标签有关. (再次,如果我没记错的话)Pdf是用media print css生成的,而png则不是.尝试删除所有@media print css时会发生什么.

编辑23/9/2014

我不知道这对你有多大的问题(因为你想付出多少努力),但如果是我,我会先尝试这样的事情:

var page = require('webpage').create();
var args = require('system').args;

var output_file = args[1], url =args[2];

page.viewportSize = { width: 1440, height: 900 };
page.paperSize = {
   format: "A4",
   orientation: "landscape",
   margin: { left: "1cm", right: "1cm", top: "1cm", bottom: "1cm" }
};

console.log(url);

page.onLoadFinished = function (status) {
    window.setTimeout(function () {
        try {
            page.evaluate(function () {
                jQuery("link").each(function (i, v) {
                    jQuery(v).attr("media", "all");
                });
            });
            page.render(output_file);
        }
        catch (e) {
            status = e.message;
        }
        console.log(status + ';;' + output_file);
        phantom.exit();
    }, 1000);
}

try {
    page.open(url);
    console.log('loading');
}
catch (ex) {
    console.log(ex.message);
    phantom.exit();
}

在评估函数中你想要做的任何事情取决于html的内容是什么.

通过使用console.log(page.content)来记录加载的内容的源代码,这是一种更具说服力的方法来告诉出现什么问题.然后用它来看看什么是错的. (只需将该源复制到’test.html’文件中并在浏览器中查看,请记住(offcourse)链接将被破坏)

点赞