npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@redocmx/client

v0.0.4

Published

Conversión CFDI a PDF

Downloads

3

Readme

Conversión de CFDI a PDF

  • English documentation available here

@redocmx/client

El módulo @redocmx/client es un cliente de Node.js diseñado para interactuar con la API REST de redoc.mx para convertir CFDIs (Comprobante Fiscal Digital por Internet) a PDFs.

Este cliente facilita el proceso de enviar datos XML y recibir el PDF convertido, junto con los detalles de la transacción y metadatos.

Este paquete incluye definiciones de TypeScript que te permiten integrarlo sin problemas en tus proyectos de TypeScript.

Instalación

Para instalar el módulo, ejecuta:

npm install @redocmx/client

o si usas yarn:

yarn add @redocmx/client

Uso

Primero, importa el módulo y crea una instancia del cliente Redoc.

Puedes pasar opcionalmente tu clave API como un argumento, o el cliente intentará cargarla de la variable de entorno REDOC_API_KEY.

import Redoc from '@redocmx/client';

const redoc = new Redoc('tu_clave_api_aquí');

Convirtiendo CFDI a PDF

@redocmx/client proporciona dos opciones para cargar datos CFDI: desde un archivo o directamente desde una cadena.

Opción 1: Cargar XML desde el Sistema de Archivos

const cfdi = redoc.cfdi.fromFile('./ruta/a/tu/archivo.xml');

Opción 2: Usar una Cadena de Contenido XML

const cfdi = redoc.cfdi.fromString('<cadena_de_contenido_xml_aquí>');

Generando el PDF

Para convertir el CFDI cargado a un PDF:

try {
  const pdf = await cfdi.toPdf();
  const buffer = pdf.toBuffer();
  
  // Escribiendo el buffer del PDF a un archivo
  await fs.writeFile('./ruta/para/guardar/archivo.pdf', buffer);

  console.log(`ID de Transacción: ${pdf.getTransactionId()}`);
  console.log(`Total de Páginas: ${pdf.getTotalPages()}`);
  console.log(`Tiempo Total: ${pdf.getTotalTimeMs()} ms`);
  console.log(`Metadatos: ${pdf.getMetadata()}`);
} catch (error) {
  console.error("Ocurrió un error durante la conversión:", error);
}

Ejemplos

Referencia API

Redoc

El objeto redoc es una instancia de Redoc, creada usando new Redoc(api_key).

| Método | Descripción | | ------------------------------- | --------------------------------------------------------------------------------------------- | | redoc.cfdi.fromFile(filePath) | Devuelve: Cfdi - InstanciaCarga contenido de archivo del sistema para convertir un CFDI a PDF. El archivo debe ser XML válido para un CFDI.Devuelve una instancia de la clase Cfdi, que se puede usar para obtener el PDF. | | redoc.cfdi.fromString(fileContent) | Devuelve: Cfdi - InstanciaUsa un CFDI como cadena para convertir el CFDI a PDF. La cadena debe ser XML válido para un CFDI.Devuelve una instancia de la clase Cfdi, que se puede usar para obtener el PDF. |

Cfdi

El objeto cfdi es una instancia de Cfdi, creada usando redoc.cfdi.fromFile(rutaDelArchivo) o redoc.cfdi.fromString(contenidoDelArchivo).

| Método | Descripción | | --------------------------- | ----------- | | cfdi.setAddenda(str) | Parámetros: StringPermite el uso de una addenda de redoc para tener control total sobre el diseño del PDF final. | | cfdi.toPdf(opciones) | Parámetros: Object - OpcionesPdfDevuelve: Pdf - InstanciaUna instancia de la clase Pdf, que al invocarse, convierte el CFDI a PDF y lo almacena, junto con los datos generados de la solicitud de conversión. |

OpcionesPdf
{
    "estilo_pdf": "John"
}

Pdf

El objeto pdf es una instancia de Pdf, creado a partir de cfdi.toPdf(opciones).

| Método | Descripción | | ----------------------------- | ----------- | | pdf.toBuffer() | Devuelve: BufferEl documento PDF como buffer, listo para almacenarse en el sistema de archivos o para enviarse de vuelta en una solicitud HTTP. | | pdf.getTransactionId() | Devuelve: String - UUIDUn ID único para la solicitud de transacción al servicio de redoc. | | pdf.getTotalPages() | Devuelve: IntegerEl número total de páginas generadas para el archivo PDF. | | pdf.getTotalTimeMs() | Devuelve: IntegerTiempo en milisegundos tomado para convertir el CFDI a PDF. | | pdf.getMetadata() | Devuelve: Object - MetadatosCfdiInformación general del CFDI convertido. |

MetadatosCfdi
{
    TDB...
}

Contribuciones

¡Las contribuciones son bienvenidas! No dudes en enviarnos una solicitud de extracción o abrir un problema para cualquier error, característica o mejora.

Licencia

Este proyecto está licenciado bajo la Licencia MIT - vea el archivo LICENSE para más detalles.