GerarDanfse 1.0.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package GerarDanfse --version 1.0.2
                    
NuGet\Install-Package GerarDanfse -Version 1.0.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="GerarDanfse" Version="1.0.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GerarDanfse" Version="1.0.2" />
                    
Directory.Packages.props
<PackageReference Include="GerarDanfse" />
                    
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 GerarDanfse --version 1.0.2
                    
#r "nuget: GerarDanfse, 1.0.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 GerarDanfse@1.0.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=GerarDanfse&version=1.0.2
                    
Install as a Cake Addin
#tool nuget:?package=GerarDanfse&version=1.0.2
                    
Install as a Cake Tool

DANFSe v2.0 — Gerador em C# (porte do gerar_danfse.js)

Porte fiel do gerar_danfse.js para C#/.NET. Gera o DANFSe (Documento Auxiliar da NFS-e) em PDF a partir do XML da NFS-e do leiaute nacional, seguindo a Nota Técnica nº 008 (SE/CGNFS-e) e o layout do modelo oficial do portal nacional — incluindo os modos auditoria (tag XML em vermelho em cada campo) e destacar retenções (fundo amarelo), marca d'água CANCELADA/SUBSTITUÍDA, canhoto destacável, quebra de página entre grupos e blocos IBS/CBS da reforma tributária.

Arquivos

Arquivo Conteúdo Equivalente no JS
DanfseModels.cs Modelos de dados, DanfseDeps, DanfseTables objeto retornado por parseDanfse + deps + globais IBGE/NBS
DanfseParser.cs ParseDanfse(xml) e ParseEvento(xml) parseDanfse / parseEvento (DOMParser → XDocument)
DanfseFormat.cs Formatadores e rótulos (moeda, CNPJ, CEP, NBS…) funções fmt* e *Label
DanfsePdfBuilder.cs Layout do PDF + resolver de fontes + fachada DanfseGenerator buildDanfsePdf / gerarDanfse (pdf-lib → PDFsharp)

Pacotes NuGet

dotnet add package PDFsharp   # 6.x — desenho de baixo nível (equivalente ao pdf-lib)
dotnet add package QRCoder    # geração do QR Code (equivalente ao qrcode-generator)

Uso

using Danfse;

// 1) (Uma vez, na inicialização) Popular as tabelas auxiliares — equivalentes aos
//    scripts ibge-municipios.js e nbs-tabela.js. Sem elas, o código IBGE aparece
//    no lugar do nome do município e a descrição da NBS fica vazia.
DanfseTables.IbgeMunicipios["3106200"] = "Belo Horizonte";
DanfseTables.IbgeUf["31"] = "MG";
// DanfseTables.NbsDesc["114013900"] = "...";
// (na prática, carregue de um JSON/recurso embarcado)

// 2) Gerar o PDF
var deps = new DanfseDeps
{
    LogoPng      = File.ReadAllBytes("logo.png"),          // opcional
    ArimoRegular = File.ReadAllBytes("Arimo-Regular.ttf"), // recomendado (norma 2.4)
    ArimoBold    = File.ReadAllBytes("Arimo-Bold.ttf"),
    Auditoria    = false,  // true = imprime a tag XML (vermelho) em cada campo
    DestacarRet  = false,  // true = destaca campos de retenção com fundo amarelo
};

var xml = File.ReadAllText("nfse.xml");
byte[] pdfBytes = DanfseGenerator.Gerar(xml, deps);
File.WriteAllBytes("danfse.pdf", pdfBytes);

Marca d'água por evento (cancelamento/substituição)

Como no JS, o cruzamento nota × evento é responsabilidade do chamador:

var data = DanfseParser.ParseDanfse(xmlNota)
           ?? throw new InvalidOperationException("XML inválido para DANFSe");

var ev = DanfseParser.ParseEvento(xmlEvento); // null se não for um evento válido
if (ev != null && ev.Chave == data.Chave)
    data.MarcaDagua = ev.MarcaDagua;          // "CANCELADA" / "SUBSTITUÍDA"

byte[] pdf = DanfsePdfBuilder.Build(data, deps);

Notas do porte (diferenças de plataforma)

  • Coordenadas: o pdf-lib usa origem no canto inferior esquerdo; o PDFsharp, no superior esquerdo. Todo o cálculo de layout foi mantido idêntico ao JS (sistema do pdf-lib) e a conversão y' = A4H − y acontece apenas nas primitivas de desenho. O texto usa alinhamento de baseline (XLineAlignment.BaseLine), igual ao drawText do pdf-lib — as posições saem iguais.
  • Fontes: com ArimoRegular/ArimoBold em deps, a Arimo é registrada via IFontResolver (fonte inteira, sem subset — mesma decisão do JS: correção > tamanho num documento fiscal). Sem os bytes, cai para "Arial" resolvida pela plataforma — funciona no Windows; em Linux/macOS forneça os bytes da fonte (ou registre seu próprio GlobalFontSettings.FontResolver antes).
  • QR Code: o ModuleMatrix do QRCoder inclui zona quieta de 4 módulos por lado; ela é descartada para desenhar o símbolo em exatamente 1,52 cm, como no original.
  • Parser: XDocument com busca por LocalName (filho imediato + busca profunda BFS), à prova de namespace — mesmo comportamento do DOMParser do navegador. Números são lidos com InvariantCulture (ponto decimal do XML) e formatados em pt-BR na saída (R$ 1.234,56).
  • Campos parseados mas não desenhados no layout (ex.: vISSQNRet, vTotalRetFed, vPisCofins, EmitenteNome) foram mantidos no modelo, como no JS.
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. 
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
1.0.12 93 11/6/2026
1.0.11 91 11/3/2026
1.0.10 215 9/24/2026
1.0.7 104 9/23/2026
1.0.5 165 7/30/2026
1.0.4 123 7/21/2026
1.0.3 124 7/5/2026
1.0.2 125 7/3/2026
1.0.1 134 7/3/2026
1.0.0 130 7/3/2026