UNPKG

@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
"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;