Skip to content

Instantly share code, notes, and snippets.

@RomanMinkin
Last active August 29, 2015 14:05
Show Gist options
  • Save RomanMinkin/560230200d0425a668dd to your computer and use it in GitHub Desktop.
Save RomanMinkin/560230200d0425a668dd to your computer and use it in GitHub Desktop.
var page = require('webpage').create(),
system = require('system'),
address, output, size;
if (system.args.length < 3 || system.args.length > 5) {
console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
console.log(' image (png/jpg output) examples: "1920px" entire page, window width 1920px');
console.log(' "800px*600px" window, clipped to 800x600');
phantom.exit(1);
} else {
address = system.args[1];
output = system.args[2];
page.viewportSize = { width: 600, height: 600 };
if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
size = system.args[3].split('*');
page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
: { format: system.args[3], orientation: 'portrait', margin: '1cm' };
} else if (system.args.length > 3 && system.args[3].substr(-2) === "px") {
size = system.args[3].split('*');
if (size.length === 2) {
pageWidth = parseInt(size[0], 10);
pageHeight = parseInt(size[1], 10);
page.viewportSize = { width: pageWidth, height: pageHeight };
page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };
} else {
console.log("size:", system.args[3]);
pageWidth = parseInt(system.args[3], 10);
pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any
console.log ("pageHeight:",pageHeight);
page.viewportSize = { width: pageWidth, height: pageHeight };
}
}
if (system.args.length > 4) {
page.zoomFactor = system.args[4];
}
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
phantom.exit();
} else {
var links = page.evaluate(function() {
var a = document.getElementById("foo");
var arr = [];
//[].slice.call(document.querySelectorAll("a[href]")).forEach(function(a) {
var e = document.createEvent('MouseEvents');
e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
arr.push(a.outerHTML);
//});
waitforload = true; //for putting some delay to load the page properly
return arr;
});
console.log('>>', JSON.stringify(links));
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
}
@smoakey
Copy link

smoakey commented Dec 9, 2014

I have copied the evaluate part to my own rasterize script. Do I need to str replace the links or anything? Am i missing something here?

The only links that work in the pdf are the ones where the hyperlink is the same as the link text, which work without the evaluate part.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment