@disruptive-learning/cfdi-to-pdf
Version:
Librería para crear un pdf basado en un XML CFDI o Retenciones
103 lines (102 loc) • 3.77 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const node_fs_1 = require("node:fs");
const consumers_1 = require("node:stream/consumers");
const pdfmake_1 = __importDefault(require("pdfmake"));
const abstract_pdf_maker_builder_1 = __importDefault(require("#src/builders/abstract_pdf_maker_builder"));
const catalogs_source_1 = require("#src/catalogs/catalogs_source");
class PdfMakerBuilder extends abstract_pdf_maker_builder_1.default {
_pdfPrinter;
constructor(documentTranslator, documentOptions, catalogs, overrideFontDictionary, options) {
super();
this._documentTranslator = documentTranslator;
this._catalogs = catalogs ?? catalogs_source_1.catalogsSource;
const fonts = overrideFontDictionary ?? this.defaultFontDictionary();
this._pdfPrinter = new pdfmake_1.default(fonts);
this._documentOptions = {
...documentOptions,
defaultStyle: {
...this.defaultStyle(),
...documentOptions?.defaultStyle,
},
styles: {
...this.defaultDictionaryStyles(),
...documentOptions?.styles,
},
pageMargins: documentOptions?.pageMargins ?? this._defaultPageMargins,
};
this._options = options;
}
async buildRaw(data) {
const pdfDoc = this.buildPdf(data);
pdfDoc.end();
const pdfBuffer = await (0, consumers_1.buffer)(pdfDoc);
return pdfBuffer.toString('binary');
}
async buildBase64(data) {
const pdfDoc = this.buildPdf(data);
pdfDoc.end();
const pdfBuffer = await (0, consumers_1.buffer)(pdfDoc);
return pdfBuffer.toString('base64');
}
async build(data, destination) {
return new Promise((resolve, reject) => {
const pdfDoc = this.buildPdf(data);
const fileWriteStream = (0, node_fs_1.createWriteStream)(destination);
fileWriteStream.on('error', (error) => {
fileWriteStream.end();
reject(error);
});
pdfDoc.pipe(fileWriteStream);
pdfDoc.on('end', () => {
resolve();
});
pdfDoc.on('error', (error) => {
reject(error);
});
pdfDoc.end();
});
}
buildStream(data) {
return this.buildPdf(data);
}
buildPdf(data) {
const pdfTemplate = this._documentTranslator.translate(data, this._documentOptions, this._catalogs, this._primaryColor, this._bgGrayColor);
return this._pdfPrinter.createPdfKitDocument(pdfTemplate, {
...this._options,
tableLayouts: this.layouts(),
});
}
defaultFontDictionary() {
return {
Courier: {
normal: 'Courier',
bold: 'Courier-Bold',
italics: 'Courier-Oblique',
bolditalics: 'Courier-BoldOblique',
},
Helvetica: {
normal: 'Helvetica',
bold: 'Helvetica-Bold',
italics: 'Helvetica-Oblique',
bolditalics: 'Helvetica-BoldOblique',
},
Times: {
normal: 'Times-Roman',
bold: 'Times-Bold',
italics: 'Times-Italic',
bolditalics: 'Times-BoldItalic',
},
Symbol: {
normal: 'Symbol',
},
ZapfDingbats: {
normal: 'ZapfDingbats',
},
};
}
}
exports.default = PdfMakerBuilder;