Direction.NFSe.Danfe 0.2.5

dotnet add package Direction.NFSe.Danfe --version 0.2.5
                    
NuGet\Install-Package Direction.NFSe.Danfe -Version 0.2.5
                    
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="Direction.NFSe.Danfe" Version="0.2.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Direction.NFSe.Danfe" Version="0.2.5" />
                    
Directory.Packages.props
<PackageReference Include="Direction.NFSe.Danfe" />
                    
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 Direction.NFSe.Danfe --version 0.2.5
                    
#r "nuget: Direction.NFSe.Danfe, 0.2.5"
                    
#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 Direction.NFSe.Danfe@0.2.5
                    
#: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=Direction.NFSe.Danfe&version=0.2.5
                    
Install as a Cake Addin
#tool nuget:?package=Direction.NFSe.Danfe&version=0.2.5
                    
Install as a Cake Tool

Direction.NFSe.Danfe

Biblioteca .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.


Principais recursos

  • ✅ Geração de HTML e PDF da DANFSe localmente
  • ✅ Sem chamadas externas (ideal para alto volume)
  • ✅ Layout HTML totalmente customizável
  • ✅ Observabilidade: warnings padronizados para campos ausentes/fallbacks
  • ✅ Testes de regressão de layout (golden tests)
  • ✅ Compatível com .NET Standard / .NET Framework / .NET moderno

Instalação

Via NuGet:

dotnet add package Direction.NFSe.Danfe

Uso básico (API recomendada)

Gerando a DANFSe a partir do XML

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);

Gerando a DANFSe CANCELADA a partir do XML

  • Como no XML não vem uma informação se a NFSe está cancelada, você é que tem que informar via parâmetro como no exemplo abaixo:
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);

Para inserir logos do seu município

  • O repositório não tem a logo de todos os municípios. Você pode criar a do seu município obedecendo o padrão de 400x400 pixels e colocando na pasta "Assets\Logos".
  • Você deve ainda modificar o arquivo municipios.csv, localizando seu município e complementando as informações de logo_path e logo_name, como no exemplo abaixo para Recife:
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.br

Acessando HTML e warnings

Console.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:

  • diagnóstico de problemas no XML
  • abertura de issues
  • contribuição da comunidade

Overloads disponíveis

A partir de NFSeSchema

DanfeResult result = danfe.Generate(
    nfseSchema,
    DanfeEnvironment.Production
);

A partir de Stream

using var stream = File.OpenRead("nfse.xml");

DanfeResult result = danfe.Generate(
    stream,
    DanfeEnvironment.RestrictedProduction
);

Ambientes

Em vez de bool isProd, a biblioteca utiliza:

DanfeEnvironment.Production
DanfeEnvironment.Restricted

Isso melhora legibilidade, evita erros e facilita evolução futura.


Customização de layout

O template HTML padrão está em:

src/Danfe/Assets/Templates/Danfe.html

Você pode:

  • editar o template padrão (fork)
  • fornecer um template próprio via DanfeOptions.TemplatePath
  • propor melhorias via PR mantendo compatibilidade de placeholders

Observabilidade e warnings

A biblioteca gera warnings sempre que:

  • um campo relevante do XML estiver ausente
  • ocorrer fallback ("-", 0,00, string.Empty)
  • um município não for encontrado
  • um placeholder não for resolvido no template

Códigos de warning padronizados:

  • NFSE_FIELD_MISSING
  • MUNICIPIO_NOT_FOUND
  • TEMPLATE_PLACEHOLDER_EMPTY

Testes e regressão de layout

O projeto utiliza golden tests para evitar regressões visuais:

  • snapshot do HTML normalizado
  • validação básica do PDF (sanity check)

Para rodar os testes:

dotnet test

Desenvolvimento

Build

dotnet restore
dotnet build -c Release

Testes

dotnet test -c Release

Formatação

dotnet format
npm run format

Contribuindo

Contribuições são muito bem-vindas, especialmente para:

  • novos layouts municipais
  • variações reais de XML
  • validações adicionais
  • melhorias de desempenho
  • testes adicionais

Veja CONTRIBUTING.md.


Licença

MIT. Veja LICENSE.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 is compatible.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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
0.2.5 102 2/4/2026
0.2.4 100 1/28/2026
0.2.3 96 1/26/2026
0.2.2 104 1/15/2026
0.2.1 160 1/13/2026
0.2.0 96 1/12/2026
0.1.9 97 1/12/2026
0.1.8 93 1/12/2026
0.1.7 93 1/12/2026
0.1.6 105 1/8/2026
0.1.5 102 1/8/2026
0.1.4 102 1/7/2026
0.1.3 289 12/16/2025
0.1.2 464 12/16/2025 0.1.2 is deprecated.
0.1.1 460 12/16/2025 0.1.1 is deprecated.
0.1.0 458 12/16/2025 0.1.0 is deprecated.