Я пытаюсь обернуть PhantomJS script в процессе node.js. phantom script захватывает URL-адрес из аргументов, предоставленных в командной строке, и выводит pdf (что очень похоже на пример rasterize.js, включенный в установку pahntom).
phantom script У меня все хорошо работает, только мой работодатель хочет, если возможно, node script. Нет проблем, я могу использовать модуль node - phantom node, чтобы его обернуть.
Но теперь я попал в камнем преткновения, у моего phantom script есть:
var page = require('webpage').create();
Итак, node.js пытается найти модуль под названием "веб-страница", модуль "веб-страницы" встроен в установку phantom, поэтому node не может ее найти. Насколько я могу судить, нет модуля npm под названием "веб-страница".
'webpage' используется следующим образом:
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, указанный в командной строке, а вывод - другой аргумент, имя и тип файла.
Может ли кто-нибудь помочь мне? Это довольно абстрактно, поэтому я не ожидаю многого, если честно, но стоит попробовать.
Спасибо.
EDIT - Приблизительно через 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);
}
});
});
}
});
Но! Это не правильный размер! Объект страницы, созданный с помощью функции create() веб-страницы phantom ', выглядит так, как только он передал URL-адрес:
В то время как мой в моем node script выглядит следующим образом:
Можно ли жестко закодировать свойства для достижения формата A4? Какие свойства мне не хватает?
Я так близко!