electron-html-to
Version:
Convert html to html/image using electron
71 lines (59 loc) • 2.04 kB
JavaScript
;
var path = require('path'),
fs = require('fs'),
assign = require('object-assign'),
pdfParser = require('../pdfParser');
module.exports = function (log, settings, browserWindow, done) {
var pdfDefaults = {
marginsType: 0,
pageSize: 'A4',
printBackground: false,
landscape: false
};
// TODO: support headerHeight, footerHeight when electron support rendering PDF's header/footer
var pdfSettings = settings.pdf,
pdfOptions = assign({}, pdfDefaults, pdfSettings, { printSelectionOnly: false });
log('before printing..');
log('pdf options:', pdfOptions);
browserWindow.webContents.printToPDF(pdfOptions, function (err, pdfBuf) {
var dist = path.join(settings.output.tmpDir, settings.output.id + '.pdf');
if (err) {
return done(err);
}
// don't know why the electron process hangs up if i don't log anything here
// (probably pdf.js?)
// anyway this log prevent the conversion to stop
log('after printing..');
log('parsing pdf..');
pdfParser(pdfBuf, function (pdfParseErr, pdfDoc) {
log('pdf parsing complete..');
if (pdfParseErr) {
return done(pdfParseErr);
}
// when running in IISNODE electron hangs when using fs.readFile, fs.createReadStream
// or any async API for read a file.. on normal windows + node electron consumes 100% CPU when
// using any async file API, so the only/best option is to read the file in a synchronous way
if (process.platform === 'win32') {
try {
fs.writeFileSync(dist, pdfBuf);
done(null, {
numberOfPages: pdfDoc.numPages,
output: dist
});
} catch (saveErr) {
done(saveErr);
}
} else {
fs.writeFile(dist, pdfBuf, function (saveErr) {
if (saveErr) {
return done(saveErr);
}
done(null, {
numberOfPages: pdfDoc.numPages,
output: dist
});
});
}
});
});
};