UNPKG

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
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'); }