DanfeSharp.Next
3.2.2
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
<PackageReference Include="DanfeSharp.Next" Version="3.2.2" />
<PackageVersion Include="DanfeSharp.Next" Version="3.2.2" />
<PackageReference Include="DanfeSharp.Next" />
paket add DanfeSharp.Next --version 3.2.2
#r "nuget: DanfeSharp.Next, 3.2.2"
#:package DanfeSharp.Next@3.2.2
#addin nuget:?package=DanfeSharp.Next&version=3.2.2
#tool nuget:?package=DanfeSharp.Next&version=3.2.2
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:
- criar o modelo a partir do XML, com a classe
...ViewModelCreatordo documento; - ajustar as opções do modelo, se quiser;
- criar o documento, adicionar o logotipo (opcional), chamar
Gerar()eSalvar(...).
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:
XmlExceptionouExceptioncom a linha e a posição do erro. - NFC-e passada ao
DanfeViewModelCreator:NotSupportedException, indicando o uso doDanfce. - 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 | Versions 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. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.