@ocelotlstudio/cfdi-pdf
Version:
Creates a pdf based on an XML CFDI
43 lines (40 loc) • 1.49 kB
text/typescript
import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
import { generatePdfContent, Options } from './builder/generateContent';
import { dataToCfdi } from './parser/dataToCfdi';
import { parseXml } from './parser/xmlToData';
import { toCurrency } from './utils/toCurrency';
pdfMake.vfs = pdfFonts.pdfMake.vfs;
/**
* CfdiPdf namespace
*/
export namespace CfdiPdf {
/**
* Function to get entire number to currency actually only spanish mexico
* @param {number} number
* @param {string=} moneda
* @returns {Promise<string>} a promise of string currency
*/
export const numberToCurrency = toCurrency;
/**
* Function to get pdf from valid xml cfdi string
* @param {string} xml
* @param {Options=} options
* @returns {Promise<string>} a pdf in base64 string
*/
export const generatePdf = (xml: string, options: Options = {}): Promise<string> => {
return new Promise<string>(async (resolve, reject) => {
try {
const xmlData = await parseXml(xml);
const cfdiData = await dataToCfdi(xmlData);
const content = await generatePdfContent(cfdiData, options);
const pdfDocGenerator = pdfMake.createPdf(content);
pdfDocGenerator.getBase64((data) => {
resolve(data);
});
} catch (e) {
reject(e);
}
});
};
}