Ich versuche, ein PhantomJS-Skript in einem node.js-Prozess zu umbrechen. Das Phantomscript erfasst eine URL aus den Argumenten, die in der Befehlszeile angegeben sind, und gibt eine PDF-Datei aus (ähnlich wie beim Beispiel "Rasterize.js", das in der Panthom-Installation enthalten ist).Verwenden der 'Webseite' Phantom-Modul in node.js
Das Phantom-Skript Ich habe funktioniert gut, es ist nur mein Arbeitgeber will ein Node-Skript, wenn möglich. Kein Problem, ich kann das node-phantom Knotenmodul verwenden, um es zu wickeln.
Aber jetzt habe ich einen Stein des Anstoßes getroffen, mein Phantom Skript hat:
var page = require('webpage').create();
So node.js versucht, ein Modul aufgerufen zu finden ‚Webseite‘, die ‚Webseite‘ Modul eingebaut in Die Phantom-Installation, damit der Knoten sie nicht finden kann. Soweit ich das beurteilen kann, gibt es kein npm-Modul namens "Webseite".
‚Homepage‘ wird wie folgt verwendet:
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);
}
});
wo Adresse die URL auf der Kommandozeile und Ausgang ist ein weiteres Argument, den Namen und den Typ der Datei angegeben ist.
Kann mir jemand helfen? Das ist ziemlich abstrakt, also erwarte ich nicht viel, wenn ich ehrlich bin, aber einen Versuch wert.
Danke.
EDIT - ca. 2 Stunden später
ich das jetzt haben, die eine PDF wirft:
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);
}
});
});
}
});
Aber! Es ist nicht die richtige Größe! Die Seite Objekt erstellt das Phantom 'Homepage' mit create() Funktion sieht wie folgt aus, bevor es die URL übergeben wird:
Während Mine in meinem Knoten Skript, sieht wie folgt aus:
Ist es möglich, die Eigenschaften hart zu codieren, um A4-Formatierung zu erreichen? Welche Eigenschaften fehlt mir?
Ich bin so nah!
Sie kommen überall mit diesem Adam? Ich bin neugierig. –
Leider nicht am Ende. Ich überredete mein Team, stattdessen den Phantomprozess zu verwenden, was gut funktionierte. –
Aus Neugier, welches Tool wird in den letzten zwei Screenshots verwendet? –