CFDI.BuildPdf 1.0.4

dotnet add package CFDI.BuildPdf --version 1.0.4
                    
NuGet\Install-Package CFDI.BuildPdf -Version 1.0.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CFDI.BuildPdf" Version="1.0.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CFDI.BuildPdf" Version="1.0.4" />
                    
Directory.Packages.props
<PackageReference Include="CFDI.BuildPdf" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CFDI.BuildPdf --version 1.0.4
                    
#r "nuget: CFDI.BuildPdf, 1.0.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=CFDI.BuildPdf&version=1.0.4
                    
Install CFDI.BuildPdf as a Cake Addin
#tool nuget:?package=CFDI.BuildPdf&version=1.0.4
                    
Install CFDI.BuildPdf as a Cake Tool

📦 CFDI.BuildPdf

NuGet NuGet Downloads License: MIT GitHub stars

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[])
  • ✔️ 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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.

Version Downloads Last updated
1.0.4 141 5/1/2025
1.0.3 131 4/30/2025
1.0.2 135 4/30/2025
1.0.1 137 4/30/2025
1.0.0 131 4/30/2025