tea-school
Version:
A simplified html + css --> PDF generator
48 lines (47 loc) • 2.09 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const pug = __importStar(require("pug"));
const sass = __importStar(require("node-sass"));
const puppeteer_1 = __importDefault(require("puppeteer"));
var TeaSchool;
(function (TeaSchool) {
TeaSchool.generatePdf = async (options) => {
const browser = await puppeteer_1.default.launch(options.puppeteerOptions);
const page = await browser.newPage();
let htmlTemplateOptions = Object.assign({}, options.htmlTemplateOptions);
let renderedTemplate;
// This is conditional since the user could get his style in some other way.
if (options.styleOptions) {
const compiledStyle = sass.renderSync(Object.assign({}, options.styleOptions));
htmlTemplateOptions.compiledStyle = compiledStyle.css;
}
if (options.htmlTemplateFn) {
renderedTemplate = options.htmlTemplateFn(htmlTemplateOptions);
}
else if (options.htmlTemplatePath) {
renderedTemplate = pug.renderFile(options.htmlTemplatePath, htmlTemplateOptions);
}
else {
throw Error('htmlTemplateFn or htmlTemplatePath must be provided');
}
// Make puppeteer render the HTML from data buffer
await page.setContent(renderedTemplate, {
waitUntil: ['load', 'domcontentloaded', 'networkidle0'],
});
const pdfBuffer = await page.pdf(Object.assign({}, options.pdfOptions));
await browser.close();
return pdfBuffer;
};
})(TeaSchool || (TeaSchool = {}));
exports.generatePdf = TeaSchool.generatePdf;
exports.default = TeaSchool;