jshtml-to-pdf
Version:
Module to generate pdf from html and js
100 lines (99 loc) • 4.19 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const handlebars_1 = __importDefault(require("handlebars"));
const html_pdf_1 = __importDefault(require("html-pdf"));
handlebars_1.default.registerHelper("ifCond", function (v1, operator, v2, options) {
switch (operator) {
case "==":
return v1 == v2 ? options.fn(this) : options.inverse(this);
case "===":
return v1 === v2 ? options.fn(this) : options.inverse(this);
case "!=":
return v1 != v2 ? options.fn(this) : options.inverse(this);
case "!==":
return v1 !== v2 ? options.fn(this) : options.inverse(this);
case "<":
return v1 < v2 ? options.fn(this) : options.inverse(this);
case "<=":
return v1 <= v2 ? options.fn(this) : options.inverse(this);
case ">":
return v1 > v2 ? options.fn(this) : options.inverse(this);
case ">=":
return v1 >= v2 ? options.fn(this) : options.inverse(this);
case "&&":
return v1 && v2 ? options.fn(this) : options.inverse(this);
case "||":
return v1 || v2 ? options.fn(this) : options.inverse(this);
default:
return options.inverse(this);
}
});
const create = function (document, options) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise((resolve, reject) => {
if (!document || !document.html || !document.data) {
reject(new Error("Some, or all, options are missing."));
}
// Fix nodejs > 14
if (!options) {
options = {
childProcessOptions: {
env: {
OPENSSL_CONF: "/dev/null",
}
}
};
}
else {
options.childProcessOptions = {
env: {
OPENSSL_CONF: "/dev/null",
}
};
}
// Compiles a template
const html = handlebars_1.default.compile(document.html)(document.data);
// Create PDF from html template generated by handlebars
// Output will be PDF file
switch (document.type) {
case "buffer":
html_pdf_1.default.create(html, options).toBuffer((err, res) => {
if (!err)
resolve(res);
else
reject(err);
});
break;
case "stream":
html_pdf_1.default.create(html, options).toStream((err, res) => {
if (!err)
resolve(res);
else
reject(err);
});
break;
default:
html_pdf_1.default.create(html, options).toFile(document.path, (err, res) => {
if (!err)
resolve(res);
else
reject(err);
});
break;
}
});
});
};
module.exports.create = create;