DanfeSharp.Next 3.2.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package DanfeSharp.Next --version 3.2.2
                    
NuGet\Install-Package DanfeSharp.Next -Version 3.2.2
                    
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="DanfeSharp.Next" Version="3.2.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DanfeSharp.Next" Version="3.2.2" />
                    
Directory.Packages.props
<PackageReference Include="DanfeSharp.Next" />
                    
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 DanfeSharp.Next --version 3.2.2
                    
#r "nuget: DanfeSharp.Next, 3.2.2"
                    
#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.
#:package DanfeSharp.Next@3.2.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DanfeSharp.Next&version=3.2.2
                    
Install as a Cake Addin
#tool nuget:?package=DanfeSharp.Next&version=3.2.2
                    
Install as a Cake Tool

DanfeSharp.Next

Biblioteca em C# que gera em PDF os documentos auxiliares dos documentos fiscais eletrônicos brasileiros a partir do XML autorizado: DANFE da NF-e, DANFE NFC-e, documentos de eventos (carta de correção, cancelamento e outros) e DACTE do CT-e. Já traz o leiaute da Reforma Tributária, com IBS, CBS e Imposto Seletivo (NT 2025.002 e NT 2026.010).

Este projeto é um fork do DanfeSharp, criado por Ricardo Brito, e é distribuído como o pacote DanfeSharp.Next. Os PDFs são escritos com a biblioteca PDFsharp.

Documentos suportados

Documento Classe Observações
DANFE da NF-e (modelo 55) DanfeSharp.Danfe Retrato e paisagem. Leiaute da Reforma Tributária (NT 2026.010) com IBS, CBS e IS quando a nota os possui
DANFE NFC-e (modelo 65) DanfeSharp.NFCe.Danfce Bobina de 80 mm ou 58 mm, com QR Code. Aceita NFC-e em contingência offline, ainda sem protocolo
Eventos da NF-e e da NFC-e DanfeSharp.Eventos.DocumentoEvento Carta de correção (CC-e), cancelamento, cancelamento por substituição e demais eventos
DACTE do CT-e 4.00 (modelo 57) DanfeSharp.CTe.Dacte Com QR Code, IBS e CBS quando informados e documentos originários em várias folhas
DANFSe da NFS-e Nacional DanfeSharp.NFSe.Danfse Leiaute v2.0 do Sistema Nacional NFS-e, com QR Code e os quadros de ISSQN, tributos federais e IBS/CBS

Instalação

dotnet add package DanfeSharp.Next

Ou, no Visual Studio, procure por DanfeSharp.Next no Gerenciador de Pacotes NuGet.

Pelo GitHub

Cada versão é publicada no GitHub Packages e anexada às Releases do repositório.

GitHub Packages: o GitHub exige autenticação até para pacotes públicos. Crie um token clássico em Settings → Developer settings → Personal access tokens com a permissão read:packages e registre a fonte uma vez:

dotnet nuget add source https://nuget.pkg.github.com/AllanLinux/index.json -n github-allanlinux -u SEU_USUARIO_GITHUB -p SEU_TOKEN
dotnet add package DanfeSharp.Next

No Linux e no macOS, acrescente --store-password-in-clear-text ao primeiro comando.

Release, sem token: baixe o .nupkg da página de Releases para uma pasta e use-a como fonte:

dotnet nuget add source C:\pacotes -n pacotes-locais
dotnet add package DanfeSharp.Next

Plataformas

Plataforma Versão do PDFsharp Fontes
.NET Framework 4.5.2 ou superior 1.50 Times New Roman instalada no Windows
.NET 8 ou superior (Windows, Linux e macOS) 6.x Times New Roman ou Liberation Serif instaladas

No Linux, instale a Liberation Serif, que tem as mesmas métricas da Times New Roman (pacote fonts-liberation no Debian/Ubuntu). Também é possível informar os arquivos da fonte antes de gerar o primeiro documento, o que é útil em contêineres sem fontes instaladas:

DanfeSharp.Fontes.Registrar("serif-regular.ttf", "serif-negrito.ttf", "serif-italico.ttf");

Como usar

Todos os documentos seguem o mesmo padrão:

  1. criar o modelo a partir do XML, com a classe ...ViewModelCreator do documento;
  2. ajustar as opções do modelo, se quiser;
  3. criar o documento, adicionar o logotipo (opcional), chamar Gerar() e Salvar(...).

O modelo pode ser criado de um arquivo (CriarDeArquivoXml(caminho)), de um Stream (CriarDeArquivoXml(stream)) ou de uma string (CriarDeStringXml(xml)). Para os eventos, só há as versões com caminho e com string. O documento implementa IDisposable, então use-o dentro de um using.

DANFE da NF-e

using DanfeSharp;
using DanfeSharp.Modelo;

var modelo = DanfeViewModelCreator.CriarDeArquivoXml("nfe.xml");

using (var danfe = new Danfe(modelo))
{
    danfe.AdicionarLogoImagem("logo.jpg");
    danfe.Gerar();
    danfe.Salvar("danfe.pdf");
}

O XML deve ser a NF-e autorizada (nfeProc). A orientação (retrato ou paisagem) vem do campo tpImp do XML e pode ser trocada em modelo.Orientacao.

Opções do DANFE
Propriedade de DanfeViewModel Padrão Efeito
Orientacao do XML Orientacao.Retrato ou Orientacao.Paisagem
ExibirLeiauteReformaTributaria automático null usa o leiaute da NT 2026.010 só quando a nota tem IBS, CBS ou IS; true ou false força
PreferirEmitenteNomeFantasia true Mostra o nome fantasia do emitente no lugar da razão social
ExibirPisConfins true Exibe os valores de PIS e COFINS
ExibirIcmsInterestadual true Exibe os valores de ICMS interestadual (DIFAL)
ExibirBlocoLocalEntrega true Exibe o quadro do local de entrega, quando houver
ExibirBlocoLocalRetirada true Exibe o quadro do local de retirada, quando houver

O modelo também pode ser montado sem XML, preenchendo DanfeViewModel, EmpresaViewModel, ProdutoViewModel e as demais classes do namespace DanfeSharp.Modelo.

DANFE NFC-e

using DanfeSharp.NFCe;

var modelo = DanfceViewModelCreator.CriarDeArquivoXml("nfce.xml");
modelo.LarguraBobina = LarguraBobina.Mm58; // padrão: Mm80

using (var danfce = new Danfce(modelo))
{
    danfce.AdicionarLogoImagem("logo.png");
    danfce.Gerar();
    danfce.Salvar("danfce.pdf");
}

O documento sai em uma única página contínua, na largura da bobina, pronta para impressoras térmicas. O XML pode ser a NFC-e autorizada (nfeProc) ou a NFC-e emitida em contingência offline (NFe, ainda sem protocolo).

Carta de correção, cancelamento e outros eventos

using DanfeSharp.Eventos;

// O XML da NF-e é opcional e serve para exibir emitente, destinatário e data de emissão.
var modelo = EventoViewModelCreator.CriarDeArquivoXml("procEventoNFe.xml", "nfe.xml");

using (var evento = new DocumentoEvento(modelo))
{
    evento.Gerar();
    evento.Salvar("cce.pdf");
}

O XML deve ser o evento processado (procEventoNFe). Eventos sem leiaute próprio mostram os campos do evento como "campo: valor".

DACTE

using DanfeSharp.CTe;

var modelo = DacteViewModelCreator.CriarDeArquivoXml("cte.xml");

using (var dacte = new Dacte(modelo))
{
    dacte.AdicionarLogoImagem("logo.jpg");
    dacte.Gerar();
    dacte.Salvar("dacte.pdf");
}

O XML deve ser o CT-e autorizado (cteProc). Quando os documentos originários não cabem na primeira folha, eles continuam nas folhas seguintes.

DANFSe (NFS-e Nacional)

using DanfeSharp.NFSe;

var modelo = DanfseViewModelCreator.CriarDeArquivoXml("nfse.xml");

using (var danfse = new Danfse(modelo))
{
    danfse.Gerar();
    danfse.Salvar("danfse.pdf");
}

O XML deve ser a NFS-e gerada pelo Sistema Nacional NFS-e (NFSe, com a DPS dentro). O leiaute segue a DANFSe v2.0 oficial: grade de 4 colunas, QR Code de consulta pública e os quadros de prestador, tomador, destinatário, intermediário, serviço, ISSQN, tributos federais, IBS/CBS e valor total. Os nomes dos municípios vêm da tabela do IBGE embutida na biblioteca, pois a NFS-e informa só o código. NFS-e de padrões municipais (ABRASF e outros) não são suportadas.

Logotipo

Todos os documentos aceitam o logotipo em imagem (AdicionarLogoImagem, JPG ou PNG) ou em PDF (AdicionarLogoPdf, que mantém o desenho vetorial), por caminho de arquivo ou por Stream.

Gerar em memória (APIs web)

Salvar(Stream) grava o PDF sem fechar o stream, o que permite devolvê-lo direto em uma API:

// ASP.NET Core
app.MapPost("/danfe", (HttpRequest request) =>
{
    var modelo = DanfeViewModelCreator.CriarDeArquivoXml(request.Body);
    var pdf = new MemoryStream();

    using (var danfe = new Danfe(modelo))
    {
        danfe.Gerar();
        danfe.Salvar(pdf);
    }

    pdf.Position = 0;
    return Results.File(pdf, "application/pdf", "danfe.pdf");
});

Erros

  • XML malformado ou de outro tipo de documento: XmlException ou Exception com a linha e a posição do erro.
  • NFC-e passada ao DanfeViewModelCreator: NotSupportedException, indicando o uso do Danfce.
  • Forma de emissão não suportada pelo DANFE: NotSupportedException.

Compilar a partir do código

dotnet build DanfeSharp.sln
dotnet test DanfeSharp.Test/DanfeSharp.Test.csproj
dotnet pack DanfeSharp/DanfeSharp.csproj -c Release -o nupkgs

Os testes geram os PDFs de exemplo na pasta Output dentro de DanfeSharp.Test/bin, a partir dos XMLs fictícios em DanfeSharp.Test/Xml.

Limitações

  • Os leiautes da NFC-e, dos eventos e do DACTE ainda não foram conferidos com notas reais. Valide com os seus documentos antes de usar em produção.
  • Não há norma que defina o IBS e a CBS no DACTE nem na NFC-e. Os quadros atuais são provisórios.
  • A DANFSe foi conferida com uma DANFSe oficial e um XML real, mas algumas descrições de códigos (como o tipo de retenção do PIS/COFINS/CSLL) só foram confirmadas para os valores encontrados; os demais aparecem apenas com o código.
  • Ainda não são gerados: DAMDFE, NFC-e em A4 e DACTE OS (modelo 67).

Licença

MIT. Veja LICENSE.txt, que mantém o aviso de copyright do projeto original.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  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. 
.NET Framework net452 is compatible.  net46 was computed.  net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
3.4.1 37 11/10/2026
3.4.0 109 11/7/2026
3.3.0 119 11/3/2026
3.2.5 89 11/3/2026
3.2.4 171 10/30/2026
3.2.3 94 10/30/2026
3.2.2 104 10/28/2026
3.2.1 106 10/28/2026