GerarDanfse 1.0.2
See the version list below for details.
dotnet add package GerarDanfse --version 1.0.2
NuGet\Install-Package GerarDanfse -Version 1.0.2
<PackageReference Include="GerarDanfse" Version="1.0.2" />
<PackageVersion Include="GerarDanfse" Version="1.0.2" />
<PackageReference Include="GerarDanfse" />
paket add GerarDanfse --version 1.0.2
#r "nuget: GerarDanfse, 1.0.2"
#:package GerarDanfse@1.0.2
#addin nuget:?package=GerarDanfse&version=1.0.2
#tool nuget:?package=GerarDanfse&version=1.0.2
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 − yacontece apenas nas primitivas de desenho. O texto usa alinhamento de baseline (XLineAlignment.BaseLine), igual aodrawTextdo pdf-lib — as posições saem iguais. - Fontes: com
ArimoRegular/ArimoBoldemdeps, a Arimo é registrada viaIFontResolver(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óprioGlobalFontSettings.FontResolverantes). - QR Code: o
ModuleMatrixdo 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:
XDocumentcom busca porLocalName(filho imediato + busca profunda BFS), à prova de namespace — mesmo comportamento doDOMParserdo navegador. Números são lidos comInvariantCulture(ponto decimal do XML) e formatados empt-BRna 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 | 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. |
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.