SDK para C#
Conversión CFDI a PDF
El SDK de C# para la conversión de CFDI a PDF te permite procesar comprobantes de cualquier tipo, ya sean de Ingreso, Egreso, Traslado, Nómina o Pago, tanto de las versiones CFDI 4.0 como de la CFDI 3.3. Además, te ofrece control total sobre la personalización del diseño del PDF.
Instalación
dotnet add package Redocmx
Copiar
Conversión
A continuación, se presenta un ejemplo práctico de cómo utilizar redocmx para convertir un CFDI a PDF de manera instantánea.
using Redocmx;
class App
{
static async Task Main(string[] args)
{
// Inicializa Redoc con tu API key.
var redoc = new Redoc("api_key");
// Cargar la ruta del XML del CFDI.
var cfdi = redoc.Cfdi.FromFile("./cfdi.xml");
try
{
// Convertir el CFDI a PDF.
var pdf = await cfdi.ToPdfAsync();
// Guardar el PDF del CFDI en el sistema de archivos.
await File.WriteAllBytesAsync("./resultado.pdf", pdf.Buffer);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Se produjo un error durante la conversión:': {ex.Message}");
}
}
}
Copiar
Personalización del PDF
Para personalizar el PDF generado a partir de tu CFDI, puedes utilizar la addenda de Redoc, diseñada específicamente para ofrecer una experiencia de uso sencilla y rápida. Consiste en un XML de estructura predefinida que te permite personalizar el resultado de tu PDF de manera eficiente y directa.
using Redocmx;
class App
{
static async Task Main(string[] args)
{
// Inicializa Redoc con tu API key.
var redoc = new Redoc("api_key");
// Cargar la ruta del XML de la Addenda de Redoc.
var addenda = redoc.Addenda.FromFile("./addenda.xml");
// Cargar la ruta del XML del CFDI.
var cfdi = redoc.Cfdi.FromFile("./cfdi.xml");
// Aplica addenda al CFDI.
cfdi.SetAddenda(addenda);
try
{
// Convertir el CFDI a PDF.
var pdf = await cfdi.ToPdfAsync();
// Guardar el PDF del CFDI en el sistema de archivos.
await File.WriteAllBytesAsync("./resultado.pdf", pdf.Buffer);
}
catch (Exception ex)
{
Console.Error.WriteLine($"Se produjo un error durante la conversión:': {ex.Message}");
}
}
}
Copiar
Ejemplo para personalizar CFDI a PDF
Avanzado
Para personalizar la conversión de CFDI a PDF, se utiliza una addenda de Redoc en XML con C#. Cada solicitud de conversión usa una addenda para personalizar el PDF (ajustes como logo e idioma entre muchos otros más). El resultado es un documento PDF almacenado, personalizado según las especificaciones del cliente.
using Redocmx;
public class Request
{
public required string ClientId { get; set; }
public required string CfdiPath { get; set; }
public required string Language { get; set; }
}
public class App
{
public static async Task Main(string[] args)
{
/*
Datos de ejemplo de las solicitudes, tu puedes definirlos y usar los que quieras.
*/
List<Request> requests = new()
{
new Request { ClientId = "123", CfdiPath = "./cfdi-123.xml", Language = "es" },
new Request { ClientId = "456", CfdiPath = "./cfdi-456.xml", Language = "en" }
};
/*
Inicializa la instancia de Redoc con la clave API.
Recomendación:
Para evitar colocar directamente la clave en tu código,
puedes definirla en la variable de entorno REDOC_API_KEY
y usar new Redoc() sin parámetros.
*/
Redoc redoc = new Redoc("api_key");
/*
Carga una addenda de Redoc desde un archivo XML.
Esta addenda es reutilizable para todas las conversiones de CFDI a PDF.
*/
Addenda addenda = redoc.Addenda.FromFile("./addenda.xml");
foreach (Request request in requests)
{
await ProcessCfdiAsync(request, redoc, addenda);
}
}
/*
Función asíncrona para procesar cada solicitud de CFDI individualmente.
*/
public static async Task ProcessCfdiAsync(Request request, Redoc redoc, Addenda addenda)
{
try
{
/*
Carga el archivo XML del CFDI del cliente especificado en la solicitud.
*/
Cfdi cfdi = redoc.Cfdi.FromFile(request.CfdiPath);
/*
Aplica la addenda al CFDI.
Opcional:
Utiliza un dictionario de llave-valor para personalizas aspectos
como el logotipo y el idioma para distintos clientes.
Es importante usar prefijos únicos en las claves para evitar
conflictos, como CUSTOM_VALUE_CLIENT_ID y CUSTOM_VALUE_LANGUAGE.
*/
cfdi.SetAddenda(addenda, new Dictionary<string, string>
{
{ "CUSTOM_VALUE_CLIENT_ID", request.ClientId },
{ "CUSTOM_VALUE_LANGUAGE", request.Language }
});
/*
Convierte el CFDI en PDF.
Opcional:
Si tienes estilos personalizados creados en la interfaz web de
Redoc, puedes referenciarlos aquí.
Ten en cuenta que los valores específicos en la addenda pueden
sobrescribir los ajustes de estos estilos predefinidos.
*/
Pdf pdf = await cfdi.ToPdfAsync(new Dictionary<string, string>
{
{ "style_pdf", "client-" + request.ClientId }
});
/*
Almacena el PDF generado.
*/
await File.WriteAllBytesAsync("./resultado-" + request.ClientId + ".pdf", pdf.Buffer);
}
catch (Exception e)
{
Console.WriteLine("Se produjo un error durante la conversión: " + e.Message);
}
}
}
Copiar
Métodos
redoc
Método |
---|
redoc.Cfdi.FromFile( filePath ) Instancia Cfdi- Carga el contenido de un archivo del sistema para convertir un CFDI a PDF.
- El archivo debe ser XML válido para un CFDI.
|
redoc.Cfdi.FromString( xmlContent ) Instancia Cfdi- Carga el contenido de un CFDI a partir de una cadena de texto
- La cadena de texto debe ser de un CFDI valido.
|
redoc.Addenda.FromFile( filePath ) Instancia Addenda- Carga el contenido de un archivo del sistema para usar como addenda y personalizar los PDF.
- El archivo debe ser XML válido de la addenda de Redoc, ver addenda.
|
redoc.Addenda.FromString( xmlContent ) Instancia Addenda- Carga el contenido de una addenda de Redoc a partir de una cadena de texto
- La cadena de texto debe ser de un XML valido de la aadenda de Redoc, ver addenda.
|
cfdi
Método | Descripción |
---|---|
cfdi.SetAddenda( Addenda ) | Opcional recibe una instancia de la addenda de redoc para tener control total sobre el diseño del PDF final. |
cfdi.ToPdfAsync( PdfConversionOptions ) |
Retorna Promise<Pdf>
Convierte el CFDI a PDF de forma asíncrona y retorna una instancia de la clase Pdf
|
Método | Descripción |
---|---|
pdf.Buffer |
Buffer
Devuelve el documento PDF en formato buffer, listo para ser almacenado o enviado en una respuesta HTTP.
|
pdf. TransactionId |
String - UUID
Un ID único para la solicitud de transacción al servicio de redoc.
|
pdf.TotalPages |
Integer
El número total de páginas generadas para el archivo PDF.
|
pdf.TotalTimeMs |
Integer
Tiempo en milisegundos que toma convertir el CFDI a PDF.
|
pdf.Metadata |
Diccionario - CfdiMetadata
Retorna un diccionario con metadatos del CFDI convertido.
|
Tipos
PdfConversionOptions
Opción | Descripción |
---|---|
style_pdf |
Nombre del estilo utilizado en la conversión, disponible para creación a través de la interfaz web de tu cuenta.
Es posible emplear tanto los estilos como la addenda; sin embargo, si optas por ambos, considera que la addenda puede modificar parcialmente la configuración establecida por los estilos.
Crear un estilo
|
email_to | Próximamente... |
CfdiMetadata
Opción | Descripción |
---|---|
Próximamente... | Próximamente... |