alphascript-server
Version:
CRUD operations for mongo and other functionalities to get started quickly in any CMS project
119 lines (103 loc) • 4.49 kB
JavaScript
var fs = require('fs');
var path = require('path');
var ejs = require('ejs');
var pdf = require('html-pdf');
var api = require('../../');
var presets = {
A4_PORTRAIT: {
format: "A4",
orientation: "portrait",
border: {
top: "10mm",
right: "10mm",
bottom: "10mm",
left: "13mm"
},
type: "pdf",
timeout: 60000
},
A4_LANDSCAPE: {
format: "A4",
orientation: "landscape",
border: {
top: "10mm",
right: "10mm",
bottom: "10mm",
left: "13mm"
},
type: "pdf",
timeout: 60000
}
};
var main = module.exports = {
presets: presets,
fromEjs: function (ejsOptions, pdfOptions, callback) {
//validate
if (typeof ejsOptions !== 'object') return callback("Invalid parameter ejsOptions");
if (typeof ejsOptions.filename !== 'string') return callback("Invalid parameter ejsOptions.path");
ejsOptions.data = ejsOptions.data || {};
if (typeof ejsOptions.data !== 'object') return callback("Invalid parameter ejsOptions.data");
ejs.renderFile(path.join(api.options.ejsRoot, ejsOptions.filename), ejsOptions.data, function (err, html) {
if (err) return callback(err);
main.fromHtml(html, pdfOptions, callback);
});
},
fromHtml: function (html, pdfOptions, callback) {
if (typeof pdfOptions !== 'object') return callback("Invalid parameter pdfOptions");
pdfOptions.preset = pdfOptions.preset || presets.A4_PORTRAIT;
if (typeof pdfOptions.preset !== 'object') return callback("Invalid parameter pdfOptions.preset");
if (typeof pdfOptions.filepath !== 'string') return callback("Invalid parameter pdfOptions.filepath");
if (typeof pdfOptions.filename !== 'string') return callback("Invalid parameter pdfOptions.filename");
//Convert all images to base64
/*
var regex = /<img[^>]+src="([^">]+)"/g;
while (a = regex.exec(html)) {
var extension = a[1].substring(a[1].indexOf(".") + 1);
var imagePath = path.normalize(path.join(url.startsWith(api.options.publicRoot) ? "" : api.options.publicRoot, path.normalize(a[1])));
html = html.replace(a[1], 'data:image/' + extension + ';base64,' + base64_encode(imagePath));
}
*/
var url = path.join(pdfOptions.filepath, pdfOptions.filename);
pdf.create(html, pdfOptions.preset).toFile(url, function (err, render) {
if (err) return callback(err);
var i = url.startsWith(api.options.publicRoot) ? api.options.publicRoot.length : 0;
callback(null, url.substring(i));
});
},
fromEjsToBuffer: function (ejsOptions, pdfOptions, callback) {
//validate
if (typeof ejsOptions !== 'object') return callback("Invalid parameter ejsOptions");
if (typeof ejsOptions.filename !== 'string') return callback("Invalid parameter ejsOptions.path");
ejsOptions.data = ejsOptions.data || {};
if (typeof ejsOptions.data !== 'object') return callback("Invalid parameter ejsOptions.data");
ejs.renderFile(path.join(api.options.ejsRoot, ejsOptions.filename), ejsOptions.data, function (err, html) {
if (err) return callback(err);
main.fromHtmlToBuffer(html, pdfOptions, callback);
});
},
fromHtmlToBuffer: function (html, pdfOptions, callback) {
if (typeof pdfOptions !== 'object') return callback("Invalid parameter pdfOptions");
pdfOptions.preset = pdfOptions.preset || presets.A4_PORTRAIT;
if (typeof pdfOptions.preset !== 'object') return callback("Invalid parameter pdfOptions.preset");
if (typeof pdfOptions.filepath !== 'string') return callback("Invalid parameter pdfOptions.filepath");
if (typeof pdfOptions.filename !== 'string') return callback("Invalid parameter pdfOptions.filename");
//Convert all images to base64
/*
var regex = /<img[^>]+src="([^">]+)"/g;
while (a = regex.exec(html)) {
var extension = a[1].substring(a[1].indexOf(".") + 1);
var imagePath = path.normalize(path.join(url.startsWith(api.options.publicRoot) ? "" : api.options.publicRoot, path.normalize(a[1])));
html = html.replace(a[1], 'data:image/' + extension + ';base64,' + base64_encode(imagePath));
}
*/
var url = path.join(pdfOptions.filepath, pdfOptions.filename);
pdf.create(html, pdfOptions.preset).toBuffer(function (err, buffer) {
if (err) return callback(err);
callback(undefined, buffer);
});
},
};
function base64_encode(file) {
var bitmap = fs.readFileSync(file);
return new Buffer(bitmap).toString('base64');
}