simple-html-to-pdf
Version:
Quick CLI command for converting HTML (from URL) to PDF
111 lines (88 loc) • 3.84 kB
JavaScript
;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var _nodePhantomAsync = require('node-phantom-async');
var _nodePhantomAsync2 = _interopRequireDefault(_nodePhantomAsync);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _promise = require('promise');
var _promise2 = _interopRequireDefault(_promise);
var argv = require('minimist')(process.argv.slice(2));
var conversion = require('phantom-html-to-pdf')();
var url = argv.url;
var file = argv.file;
var _argv$verbose = argv.verbose;
var verbose = _argv$verbose === undefined ? false : _argv$verbose;
var _argv$fitToPage = argv.fitToPage;
var fitToPage = _argv$fitToPage === undefined ? false : _argv$fitToPage;
var _argv$phantomDelay = argv.phantomDelay;
var phantomDelay = _argv$phantomDelay === undefined ? 200 : _argv$phantomDelay;
var printDelay = argv.printDelay;
if (!url || !file) {
console.log(_chalk2['default'].red('Some of the arguments are missing.'));
console.log(_chalk2['default'].red('Usage: simple-html-to-pdf --url="http://www.somewebsite.com" --file="/tmp/my.pdf" [--verbose] [--fitToPage] [--phantomDelay] [--printDelay]'));
console.log(_chalk2['default'].red('Exiting...'));
console.log('\n');
process.exit(0);
}
var conversionOptions = { fitToPage: fitToPage, printDelay: printDelay };
function myConsole(message) {
var verbose = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
if (verbose) {
return console.log(message);
}
}
var self = {};
_nodePhantomAsync2['default'].create().bind({}).then(function (ph) {
self.ph = ph;
return ph.createPage();
}).then(function (page) {
self.page = page;
return page.open(url);
}).then(function (status) {
myConsole(status, verbose);
console.log(_chalk2['default'].bold.cyan('Going to wait ' + phantomDelay + ' milliseconds...'));
return new _promise2['default'](function (resolve, reject) {
setTimeout(function () {
console.log(_chalk2['default'].bold.cyan('Wait finished.'));
self.page.get('content').then(resolve)['catch'](reject);
}, phantomDelay);
});
}).then(function (content) {
myConsole(content, verbose);
conversionOptions = _extends({}, conversionOptions, { html: content });
return new _promise2['default'](function (resolve, reject) {
conversion(conversionOptions, function (err, pdf) {
if (err) {
console.log(_chalk2['default'].red(err));
conversion.kill();
return reject(err);
}
myConsole(pdf.logs, verbose);
myConsole(pdf.numberOfPages, verbose);
var stream = pdf.stream.pipe(_fs2['default'].createWriteStream(file));
stream.on('finish', function () {
conversion.kill();
console.log(_chalk2['default'].bold.cyan('Conversion success!'));
resolve();
});
stream.on('error', function (error) {
console.error(_chalk2['default'].red('Failed to write a file...'));
console.error(_chalk2['default'].red(error));
conversion.kill();
reject(error);
});
});
});
})['catch'](function (error) {
console.error(_chalk2['default'].red('Conversion failed...'));
console.error(_chalk2['default'].red(error));
})['finally'](function () {
console.log(_chalk2['default'].bold.cyan('Going to close Phantom'));
return self.ph.exit();
})['finally'](function () {
console.log(_chalk2['default'].bold.cyan('Going to exit the process'));
process.exit();
});