Biblioteca .NET para gerar DANFSe (PDF) a partir do XML da Nota Fiscal de Serviço Nacional (NFSe/DPS), sem depender de endpoint externo.
$ dotnet add package Direction.NFSe.DanfeBiblioteca .NET para gerar DANFSe (PDF) a partir do XML da NFSe Nacional (DPS/NFSe), sem depender de endpoint externo, permitindo alto volume, baixa latência e customização completa de layout.
Status: operacional em produção nos cenários do autor.
A biblioteca é open source e contribuições são fortemente incentivadas para ampliar compatibilidade com variações reais de XML e regras municipais.
Via NuGet:
dotnet add package Direction.NFSe.Danfe
using Direction.NFSe.Danfe;
var xml = File.ReadAllText("nfse.xml");
var danfe = new DanfeService(new DanfeOptions
{
// Opcional: diretório base para templates e dados
// BasePath = AppContext.BaseDirectory,
// Opcional: template customizado
// TemplatePath = @"C:\meu-layout\Danfe.html"
});
DanfeResult result = danfe.Generate(
xml,
DanfeEnvironment.Production
);
File.WriteAllBytes("danfse.pdf", result.PdfBytes);
using Direction.NFSe.Danfe;
var xml = File.ReadAllText("nfse.xml");
var danfe = new DanfeService();
DanfeResult result = danfe.Generate(
xml,
DanfeEnvironment.Production,
true // Informa que é uma NFSe CANCELADA
);
File.WriteAllBytes("danfse.pdf", result.PdfBytes);
2611606,Recife,-8.04666,-34.8771,1,26,2531,81,America/Sao_Paulo,Assets\Logos\logoRecife.png,Prefeitura do Recife<br>Secretaria de Finanças<br>faleconosco@recife.pe.gov.brConsole.WriteLine(result.Html);
foreach (var warning in result.Warnings)
{
Console.WriteLine($"{warning.Code}: {warning.Message} ({warning.Path})");
}Exemplo de warning retornado:
NFSE_FIELD_MISSING: Campo vLiq ausente; usando '-' (infNFSe.valores.vLiq)
Esses warnings facilitam:
NFSeSchemaDanfeResult result = danfe.Generate(
nfseSchema,
DanfeEnvironment.Production
);Streamusing var stream = File.OpenRead("nfse.xml");
DanfeResult result = danfe.Generate(
stream,
DanfeEnvironment.RestrictedProduction
);Em vez de bool isProd, a biblioteca utiliza:
DanfeEnvironment.Production
DanfeEnvironment.RestrictedIsso melhora legibilidade, evita erros e facilita evolução futura.
O template HTML padrão está em:
src/Danfe/Assets/Templates/Danfe.html
Você pode:
DanfeOptions.TemplatePathA biblioteca gera warnings sempre que:
"-", 0,00, string.Empty)Códigos de warning padronizados:
NFSE_FIELD_MISSINGMUNICIPIO_NOT_FOUNDTEMPLATE_PLACEHOLDER_EMPTYO projeto utiliza golden tests para evitar regressões visuais:
Para rodar os testes:
dotnet testdotnet restore
dotnet build -c Releasedotnet test -c Releasedotnet format
npm run formatContribuições são muito bem-vindas, especialmente para:
Veja CONTRIBUTING.md.
MIT. Veja LICENSE.