@digimuza/pdf-tools
Version:
PDF generation library & generation utilities
59 lines (58 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.generate = exports.mergePDF = void 0;
const tslib_1 = require("tslib");
const P = (0, tslib_1.__importStar)(require("ts-prime"));
const Jet = (0, tslib_1.__importStar)(require("fs-jetpack"));
const tmp_1 = require("tmp");
const utils_1 = require("@digimuza/pdf-components/lib/utils");
const ix_1 = require("ix");
const html_to_pdf = require('./html-to-pdf.js');
const pdf_merger_js_1 = (0, tslib_1.__importDefault)(require("pdf-merger-js"));
async function mergePDF(pdfList, options) {
var _a;
const merger = new pdf_merger_js_1.default();
for (const pdf of pdfList) {
merger.add(pdf);
}
await merger.save(options.output);
(_a = options.logger) === null || _a === void 0 ? void 0 : _a.info(`PDF stored to ${options.output}`);
}
exports.mergePDF = mergePDF;
async function singlePdf(content) {
const format = P.isObject(content.format)
? Object.assign({}, (0, utils_1.flipDimensions)([content.format.width, content.format.height], true)) : {
format: content.format,
};
const result = await P.canFail(() => html_to_pdf.generatePdf({
content: content.content,
}, Object.assign(Object.assign({}, format), { landscape: content.landscape })));
if (P.isError(result))
throw result;
return result;
}
/**
*
* @returns {string} File to generated pdf file
*/
async function generate(args) {
let progress = 0;
const pdfList = await ix_1.AsyncIterable.from(args.content.map((e, index) => (Object.assign(Object.assign({}, e), { index }))))
.buffer(3)
.map((pdf) => {
return Promise.all(pdf.map((c) => {
var _a;
(_a = args.logger) === null || _a === void 0 ? void 0 : _a.info(`Generating (${c.index + 1}/${args.content.length}) page...`);
return singlePdf(c);
}));
})
.toArray();
const mergedPDF = P.flatten(pdfList);
const name = args.output ? Jet.path(process.cwd(), args.output) : (0, tmp_1.tmpNameSync)();
await mergePDF(mergedPDF, {
logger: args.logger,
output: name,
});
return name;
}
exports.generate = generate;