Giter Site home page Giter Site logo

init5god / cfdi-to-pdf_onisys Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nodecfdi/cfdi-to-pdf

0.0 0.0 0.0 1.32 MB

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

Home Page: https://nodecfdi.github.io/cfdi-to-pdf/

License: MIT License

TypeScript 100.00%

cfdi-to-pdf_onisys's Introduction

@nodecfdi/cfdi-to-pdf

Source Code XO code style Npm Node Version Support Discord Latest Version Software License Build Status Reliability Maintainability Code Coverage Violations Total Downloads

Create a generic PDF file from a CFDI 3.3, CFDI 4.0, Retenciones 1.0 and Retenciones 2.0

🇺🇸 The documentation of this project is in spanish as this is the natural language for intended audience.

🇲🇽 La documentación del proyecto está en español porque ese es el lenguaje principal de los usuarios.

Acerca de @nodecfdi/cfdi-to-pdf

En algunos casos necesitas generar un archivo PDF desde un CFDI (Comprobante fiscal Digital por Internet), o constancia de retenciones. Esta librería te ayuda a crear un pdf genérico. Además puedes crear un boceto a tu gusto y acomodarlo a como lo requieras. Inspirada por la versión de php https://github.com/phpcfdi/cfditopdf

Instalación

NPM

npm i @nodecfdi/cfdi-to-pdf --save

YARN

yarn add @nodecfdi/cfdi-to-pdf

PNPM

pnpm add @nodecfdi/cfdi-to-pdf

CDN - Browser

Usa la versión mas reciente publicada cambiando <latest-version> por la última version. Ex. [email protected]/dist...

<script src="https://unpkg.com/@nodecfdi/cfdi-to-pdf@<latest-version>/dist/cfdi-to-pdf.global.js"></script>

Uso básico

Ejemplo en nodejs usando xmldom para CFDI 3.3 y CFDI 4.0

import { installPdfMake, GenericCfdiTranslator, PdfMakerBuilder, CfdiData } from '@nodecfdi/cfdi-to-pdf';
import { XmlNodeUtils, install } from '@nodecfdi/cfdiutils-common';
import { DOMImplementation, XMLSerializer, DOMParser } from '@xmldom/xmldom';
import PdfPrinter from 'pdfmake';
import { join } from 'path';
import { readFileSync } from 'fs';

const inputCfdiPath = './cfdi40or33-real.xml';
const outputCfdiPath = './cfdi40or33-real.pdf';

// from version 1.2.x on @nodecfdi/cfdiutils-common required install dom resolution
install(new DOMParser(), new XMLSerializer(), new DOMImplementation());

// PDFMAKE on nodejs require font path not included on distributable files
installPdfMake(
    new PdfPrinter({
        Roboto: {
            normal: join('.', 'fonts', 'Roboto-Regular.ttf'),
            bold: join('.', 'fonts', 'Roboto-Medium.ttf'),
            italics: join('.', 'fonts', 'Roboto-Italic.ttf'),
            bolditalics: join('.', 'fonts', 'Roboto-MediumItalic.ttf')
        }
    })
);

const xml = readFileSync(inputCfdiPath).toString();
const comprobante = XmlNodeUtils.nodeFromXmlString(xml);
const cfdiData = new CfdiData(comprobante, null, null, 'mylogoBase64');

const builder = new PdfMakerBuilder(new GenericCfdiTranslator());
await builder.build(cfdiData, outputCfdiPath);

// Optional: You can pass catalogs class implements CatalogsInterface
// await builder.build(cfdiData, outputCfdiPath, catalogs);

Ejemplo en nodejs usando jsDom para CFDI 3.3 y CFDI 4.0

import { installPdfMake, GenericCfdiTranslator, PdfMakerBuilder, CfdiData } from '@nodecfdi/cfdi-to-pdf';
import { XmlNodeUtils, install } from '@nodecfdi/cfdiutils-common';
import { JSDOM } from 'jsdom';
import PdfPrinter from 'pdfmake';
import { join } from 'path';
import { readFileSync } from 'fs';

const inputCfdiPath = './cfdi40or33-real.xml';
const outputCfdiPath = './cfdi40or33-real.pdf';

const dom = new JSDOM();
const jsDOMParser = new dom.window.DOMParser();
const jsXMLSerializer = new dom.window.XMLSerializer();
const jsDOMImplementation = dom.window.document.implementation;

// from version 1.2.x on @nodecfdi/cfdiutils-common required install dom resolution
install(jsDOMParser, jsXMLSerializer, jsDOMImplementation);

// PDFMAKE on nodejs require font path not included on distributable files
installPdfMake(
    new PdfPrinter({
        Roboto: {
            normal: join('.', 'fonts', 'Roboto-Regular.ttf'),
            bold: join('.', 'fonts', 'Roboto-Medium.ttf'),
            italics: join('.', 'fonts', 'Roboto-Italic.ttf'),
            bolditalics: join('.', 'fonts', 'Roboto-MediumItalic.ttf')
        }
    })
);

const xml = readFileSync(inputCfdiPath).toString();
const comprobante = XmlNodeUtils.nodeFromXmlString(xml);
const cfdiData = new CfdiData(comprobante, null, null, 'mylogoBase64');

const builder = new PdfMakerBuilder(new GenericCfdiTranslator());
await builder.build(cfdiData, outputCfdiPath);

// Optional: You can pass catalogs class implements CatalogsInterface
// await builder.build(cfdiData, outputCfdiPath, catalogs);

Ejemplo en nodejs usando xmldom para RET 1.0 y RET 2.0

import { installPdfMake, GenericRetencionesTranslator, PdfMakerBuilder, RetencionesData } from '@nodecfdi/cfdi-to-pdf';
import { XmlNodeUtils, install } from '@nodecfdi/cfdiutils-common';
import { DOMImplementation, XMLSerializer, DOMParser } from '@xmldom/xmldom';
import PdfPrinter from 'pdfmake';
import { join } from 'path';
import { readFileSync } from 'fs';

const inputRetPath = './ret10or20-real.xml';
const outputRetPath = './ret10or20-real.pdf';

// from version 1.2.x on @nodecfdi/cfdiutils-common required install dom resolution
install(new DOMParser(), new XMLSerializer(), new DOMImplementation());

// PDFMAKE on nodejs require font path not included on distributable files
installPdfMake(
    new PdfPrinter({
        Roboto: {
            normal: join('.', 'fonts', 'Roboto-Regular.ttf'),
            bold: join('.', 'fonts', 'Roboto-Medium.ttf'),
            italics: join('.', 'fonts', 'Roboto-Italic.ttf'),
            bolditalics: join('.', 'fonts', 'Roboto-MediumItalic.ttf')
        }
    })
);

const xml = readFileSync(inputRetPath).toString();
const comprobante = XmlNodeUtils.nodeFromXmlString(xml);
const retencionesData = new RetencionesData(comprobante, null, null, 'mylogoBase64');

const builder = new PdfMakerBuilder(new GenericRetencionesTranslator());
await builder.build(retencionesData, outputRetPath);
// Optional: You can pass catalogs class implements CatalogsInterface
// await builder.build(retencionesData, outputRetPath, catalogs);

Ejemplo en nodejs usando jsDom para RET 1.0 y RET 2.0

import { installPdfMake, GenericRetencionesTranslator, PdfMakerBuilder, RetencionesData } from '@nodecfdi/cfdi-to-pdf';
import { XmlNodeUtils, install } from '@nodecfdi/cfdiutils-common';
import { JSDOM } from 'jsdom';
import PdfPrinter from 'pdfmake';
import { join } from 'path';
import { readFileSync } from 'fs';

const inputRetPath = './ret10or20-real.xml';
const outputRetPath = './ret10or20-real.pdf';

const dom = new JSDOM();
const jsDOMParser = new dom.window.DOMParser();
const jsXMLSerializer = new dom.window.XMLSerializer();
const jsDOMImplementation = dom.window.document.implementation;

// from version 1.2.x on @nodecfdi/cfdiutils-common required install dom resolution
install(jsDOMParser, jsXMLSerializer, jsDOMImplementation);

// PDFMAKE on nodejs require font path not included on distributable files
installPdfMake(
    new PdfPrinter({
        Roboto: {
            normal: join('.', 'fonts', 'Roboto-Regular.ttf'),
            bold: join('.', 'fonts', 'Roboto-Medium.ttf'),
            italics: join('.', 'fonts', 'Roboto-Italic.ttf'),
            bolditalics: join('.', 'fonts', 'Roboto-MediumItalic.ttf')
        }
    })
);

const xml = readFileSync(inputRetPath).toString();
const comprobante = XmlNodeUtils.nodeFromXmlString(xml);
const retencionesData = new RetencionesData(comprobante, null, null, 'mylogoBase64');

const builder = new PdfMakerBuilder(new GenericRetencionesTranslator());
await builder.build(retencionesData, outputRetPath);

// Optional: You can pass catalogs class implements CatalogsInterface
// await builder.build(retencionesData, outputRetPath, catalogs);

Puedes ver mas ejemplos en examples

Nota: Actualmente la librería requiere que según el tipo de projecto (Nodejs | browser) se le pase el pdfmake ejecutable, según la documentación de pdfmake y esto se puede ejecutando el instalador proporcionado por @nodecfdi/cfdi-to-pdf.

Elementos soportados

Elementos base soportados:

Tipo Soportado
CFDI3.3
CFDI4.0
RET1.0
RET2.0

Complementos:

Complemento Soportado
PAGO1.0
PAGO2.0
IMPUESTOS LOCALES
PLATAFORMAS TECNOLÓGICAS

Patrocinadores

@nodecfdi/cfdi-to-pdf es un projecto de licencia abierta MIT donde el continuo desarrollo es realizado por el apoyo de la comunidad y de los patrocinadores.

Infaster

Soporte

Puedes obtener soporte abriendo un ticket en Github.

Adicionalmente, esta librería pertenece a la comunidad OcelotlStudio, así que puedes usar los mismos canales de comunicación para obtener ayuda de algún miembro de la comunidad.

Compatibilidad

Esta librería se mantendrá compatible con al menos la versión con soporte activo de Node más reciente.

También utilizamos Versionado Semántico 2.0.0 por lo que puedes usar esta librería sin temor a romper tu aplicación.

Contribuciones

Las contribuciones con bienvenidas. Por favor lee CONTRIBUTING para más detalles y recuerda revisar el archivo CHANGELOG.

Copyright and License

The @nodecfdi/cfdi-to-pdf library is copyright © NodeCfdi - OcelotlStudio and licensed for use under the MIT License (MIT). Please see LICENSE for more information.

cfdi-to-pdf_onisys's People

Contributors

luffynando avatar celli33 avatar renovate[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.