当网站变得更“花哨”时,我们将phantomjs 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);
});
答案 0 :(得分:2)
一年多前我遇到了一些问题。对我来说(如果我没记错的话),它与@media标签有关。 (再次,如果我没记错的话)Pdf是用media print css生成的,而png则不是。尝试删除所有@media print css时会发生什么。
EDIT 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)链接将被破坏)