var system = require(‘system’),
stdout = system.stdout, page = require('webpage').create(), url = system.args[1], format = system.args[2], opts = system.args[3], args = { cutoff: 5000 }; defaultPaperSize = { format: 'A4', orientation: 'portrait' };
if( !url || !format ) {
stdout.write('Error: A URL and a file type must be given'); phantom.exit(1);
}
function extend() {
var obj, key, i = 1, len = arguments.length, baseObj = arguments[0]; for (; i < len; i++) { obj = arguments[i]; for (key in obj) { if (obj.hasOwnProperty(key)) { baseObj[key] = obj[key]; } } } return baseObj;
}
function timeout() {
stdout.write('Error: Request to ' + url + ' exceeded ' + args.cutoff + 'ms'); phantom.exit(1);
}
function setCutoff() {
setTimeout( timeout, args.cutoff );
}
function parseArguments() {
function camelize( string ) { return string.replace(/_([a-z])/g, function (g) { return g[1].toUpperCase(); }); } var systemArgs = opts ? JSON.parse( opts ) : {}; for ( var arg in systemArgs ) { if ( systemArgs.hasOwnProperty(arg) ) { args[camelize( arg )] = systemArgs[arg]; } }
}
function addCookies() {
if ( !args.cookies ) { return; } args.cookies.forEach(phantom.addCookie);
}
function setViewport() {
if ( args.height ) { page.viewportSize = { height: args.height, width: args.width }; }
}
function setPaperSize() {
if ( args.paperSize && format === 'pdf' ) { if ( args.paperSize.width || args.paperSize.height ) { page.paperSize = { width: args.paperSize.width, height: args.paperSize.height, margin: args.paperSize.margin }; } else { page.paperSize = extend( {}, defaultPaperSize, args.paperSize ); } }
}
function getClipRect() {
if ( args.el ) { page.clipRect = page.evaluate(function( sel ) { return document.querySelector( sel ).getBoundingClientRect(); }, args.el); }
}
// either get the base64 encoded file directly if the type is supported, or write the file to stdout function render() {
if ( format === 'pdf' ) { page.render( '/dev/stdout', {format: format} ); } else { stdout.write(page.renderBase64( format )); } phantom.exit();
}
function openPage() {
page.open(url, function( status ) { if( status !== 'success' ) { stdout.write('Error: Unable to load: ' + url); phantom.exit(1); } else { getClipRect(); render(); } }); setCutoff();
}
parseArguments(); addCookies(); setViewport(); setPaperSize(); openPage();