CFDI.BuildPdf
1.0.4
dotnet add package CFDI.BuildPdf --version 1.0.4
NuGet\Install-Package CFDI.BuildPdf -Version 1.0.4
<PackageReference Include="CFDI.BuildPdf" Version="1.0.4" />
<PackageVersion Include="CFDI.BuildPdf" Version="1.0.4" />
<PackageReference Include="CFDI.BuildPdf" />
paket add CFDI.BuildPdf --version 1.0.4
#r "nuget: CFDI.BuildPdf, 1.0.4"
#addin nuget:?package=CFDI.BuildPdf&version=1.0.4
#tool nuget:?package=CFDI.BuildPdf&version=1.0.4
📦 CFDI.BuildPdf
Descripción general
CFDI.BuildPdf es una librería .NET que permite generar de forma sencilla un PDF estilizado a partir de un XML CFDI 4.0 con complemento Carta Porte 3.1. Se enfoca en facilitar la integración en APIs o sistemas backend, permitiendo trabajar desde una ruta local, una cadena de texto XML o un arreglo de bytes.
📥 Instalación
Desde NuGet:
dotnet add package CFDI.BuildPdf
🚀 Características
- ✔️ Soporte completo para CFDI 4.0 con Complemento Carta Porte 3.1
- ✔️ Generación de PDF desde:
- ✔️ Ruta física al archivo
.xml
- ✔️ String de XML
- ✔️ Arreglo de bytes (
byte[]
)
- ✔️ Ruta física al archivo
- ✔️ Inclusión opcional de logotipo
- ✔️ Control sobre visualización de mercancías
📁 Estructura del PDF generado
El PDF incluye secciones como
- Datos del emisor y receptor
- UUID, fecha de certificación, certificados
- Totales del CFDI e impuestos
- Addenda genérica (si aplica)
- Complemento Carta Porte:
- Ubicaciones
- Mercancías (detalle o resumen)
- Transporte, seguro, remolques
- QR y sellos digitales
📚 Requisitos
✔️ .NET 6.0 o superior
✔️ Requisitos del proyecto consumidor Para que la generación de PDF funcione correctamente (especialmente al publicar o en entornos sin contexto de compilación como Azure o Docker), agrega lo siguiente en tu archivo .csproj del proyecto que consume la librería:
<PropertyGroup>
<PreserveCompilationContext>true</PreserveCompilationContext>
<CopyRefAssembliesToPublishDirectory>true</CopyRefAssembliesToPublishDirectory>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
</PropertyGroup>
✔️ Además, agrega estas dependencias para evitar errores de downgrade al publicar:
<ItemGroup>
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" />
<PackageReference Include="System.Net.Primitives" Version="4.3.0" />
</ItemGroup>
🧰 Métodos disponibles
La clase CfdiPdf expone métodos estáticos para generar el PDF a partir del XML del CFDI:
DesdeRutaAsync
Task<byte[]> DesdeRutaAsync(string rutaXml, bool mostrarMercancias = true, string? logoBase64 = null)
- ✔️ rutaXml: Ruta absoluta del archivo XML timbrado.
- ✔️ mostrarMercancias (opcional): Indica si se desea mostrar el detalle de mercancías en el PDF. Default: true.
- ✔️ logoBase64 (opcional): Cadena en base64 del logotipo a mostrar en el PDF.
DesdeXmlStringAsync
Task<byte[]> DesdeXmlStringAsync(string xmlContent, bool esContenidoXml, bool mostrarMercancias = true, string? logoBase64 = null)
- ✔️ xmlContent: Contenido del CFDI en string. Puede ser XML puro o una ruta.
- ✔️ esContenidoXml: Si es true, el valor de xmlContent es un XML en texto plano. Si es false, se trata de una ruta.
- ✔️ mostrarMercancias (opcional): Mostrar o no el detalle de mercancías. Default: true.
- ✔️ logoBase64 (opcional): Logotipo en base64.
DesdeXmlBytesAsync
Task<byte[]> DesdeXmlBytesAsync(byte[] xmlBytes, bool mostrarMercancias = true, string? logoBase64 = null)
- ✔️ xmlBytes: Contenido del XML como arreglo de bytes.
- ✔️ mostrarMercancias (opcional): Muestra o no mercancías. Default: true.
- ✔️ logoBase64 (opcional): Logotipo en base64.
🔵 Uso basico
📜 Desde un string XML
using CFDI.BuildPdf;
var bytes = await CfdiPdf.DesdeXmlStringAsync(xmlString, esContenidoXml: true);
File.WriteAllBytes("cfdi_output.pdf", bytesPdf);
📁 Desde una ruta
using CFDI.BuildPdf;
await CfdiPdf.DesdeRutaAsync("C:\\Users\\Test\\archivo.xml", mostrarMercancias: true);
File.WriteAllBytes("cfdi_output.pdf", bytesPdf);
📦 Desde un byte[]
using CFDI.BuildPdf;
var bytes = await CfdiPdf.DesdeXmlBytesAsync(xmlBytes);
File.WriteAllBytes("cfdi_output.pdf", bytesPdf);
✨ Con logotipo personalizado (base64):
using CFDI.BuildPdf;
var logoBytes = await File.ReadAllBytesAsync("C:\\Users\\Test\\logo.png");
var logoBase64 = Convert.ToBase64String(logoBytes);
await CfdiPdf.DesdeRutaAsync("C:\\Users\\Test\\archivo.xml", mostrarMercancias: true, logoBase64: logo);
File.WriteAllBytes("cfdi_output.pdf", bytesPdf);
Author
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.