UNPKG

@disruptive-learning/cfdi-to-pdf

Version:

Librería para crear un pdf basado en un XML CFDI o Retenciones

68 lines (67 loc) 2.48 kB
import pdfMake from 'pdfmake/build/pdfmake.js'; import AbstractPdfMakerBuilder from '#src/builders/abstract_pdf_maker_builder'; import { catalogsSource } from '#src/catalogs/catalogs_source'; export default class PdfMakerBuilder extends AbstractPdfMakerBuilder { _overrideFonts; _overrideVFS; constructor(documentTranslator, documentOptions, catalogs, overrideFonts, overrideVFS, options) { super(); this._documentTranslator = documentTranslator; this._catalogs = catalogs ?? catalogsSource; this._overrideFonts = overrideFonts; this._overrideVFS = overrideVFS; 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 builderPdf = await this.buildPdf(data); return new Promise((resolve, reject) => { try { builderPdf.getBuffer((pdfBuffer) => { resolve(pdfBuffer.toString('binary')); }, this._options); } catch (error) { reject(error); } }); } async buildBase64(data) { const builderPdf = await this.buildPdf(data); return new Promise((resolve, reject) => { try { builderPdf.getBase64((pdfBase64) => { resolve(pdfBase64); }, this._options); } catch (error) { reject(error); } }); } async buildPdf(data) { const vfsFonts = await import('pdfmake/build/vfs_fonts.js'); const vfs = 'default' in vfsFonts ? vfsFonts.default : undefined; if (vfs && !this._overrideVFS) { this._overrideVFS = vfs.pdfMake.vfs; } const pdfTemplate = this._documentTranslator.translate(data, this._documentOptions, this._catalogs, this._primaryColor, this._bgGrayColor); return pdfMake.createPdf(pdfTemplate, this.layouts(), this._overrideFonts, this._overrideVFS); } defaultStyle() { return { fontSize: 8, }; } }