我正在尝试将 PhantomJS 脚本包装在 node.js 进程中。幻影脚本从命令行提供的参数中获取一个 url 并输出一个 pdf(非常类似于 pahntom 安装中包含的 rasterize.js 示例)。
我拥有的幻影脚本运行良好,如果可能的话,只是我的雇主想要一个节点脚本。没问题,我可以使用node-phantom节点模块来包装它。
但现在我遇到了一个绊脚石,我的幻影脚本有:
var page = require('webpage').create();
因此,node.js 试图找到一个名为“webpage”的模块,“webpage”模块内置于幻像安装中,因此节点无法找到它。据我所知,没有名为“网页”的 npm 模块。
“网页”是这样使用的:
page.open(address, function (status) {
if (status !== 'success') {
// --- Error opening the webpage ---
console.log('Unable to load the address!');
} else {
// --- Keep Looping Until Render Completes ---
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
其中 address 是在命令行中指定的 url,而 output 是另一个参数,即文件的名称和类型。
谁能帮我吗?这是一个相当抽象的问题,所以说实话,我并不期待太多,但值得一试。
谢谢。
编辑 - 大约 2 小时后
我现在有这个抛出一个PDF:
var phanty = require('node-phantom');
var system = require('system');
phanty.create(function(err,phantom) {
//var page = require('webpage').create();
var address;
var output;
var size;
if (system.args.length < 4 || system.args.length > 6) {
// --- Bad Input ---
console.log('Wrong usage, you need to specify the BLAH BLAH BLAH');
phantom.exit(1);
} else {
phantom.createPage(function(err,page){
// --- Set Variables, Web Address, Output ---
address = system.args[2];
output = system.args[3];
page.viewportSize = { width: 600, height: 600 };
// --- Set Variables, Web Address ---
if (system.args.length > 4 && system.args[3].substr(-4) === ".pdf") {
// --- PDF Specific ---
size = system.args[4].split('*');
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
: { format: system.args[4], orientation: 'portrait', margin: '1cm' };
}
// --- Zoom Factor (Should Never Be Set) ---
if (system.args.length > 5) {
page.zoomFactor = system.args[5];
} else {
page.zoomFactor = 1;
}
//----------------------------------------------------
page.open(address ,function(err,status){
if (status !== 'success') {
// --- Error opening the webpage ---
console.log('Unable to load the address!');
} else {
// --- Keep Looping Until Render Completes ---
process.nextTick(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
});
}
});
但!这不是正确的尺寸!使用 phantom 'webpage' create() 函数创建的页面对象在传递 URL 之前如下所示:
而我在我的节点脚本中,看起来像这样:
是否可以对属性进行硬编码以实现 A4 格式?我缺少什么属性?
我好近!