Página 1 de 1

Gerador de Danfse Nacional em PDF com Harbour e LibHaru

Enviado: 29 Jul 2026 16:02
por malcarli
Estrutura do DANFSe Gerado
O documento gerado abrange todas as seções estipuladas pelo padrão nacional:Cabeçalho: Logotipo da NFS-e Nacional, Chave de Acesso, Número da NFS-e, Número da DPS, Competência, Tipo de Emissão e QR Code.Identificação dos Envolvidos: Bloco do Prestador/Fornecedor, Tomador/Adquirente e Destinatário da Operação.Serviço Prestado: Código de Tributação Nacional/Municipal, Código NBS, Local de Prestação e Descrição Completa do Serviço.Tributação Municipal (ISSQN): Base de cálculo, Alíquota, Valor do Serviço, Retenção e Descontos.Tributação Federal & Reforma Tributária (IBS/CBS): Valores retidos de IRRF, CSLL, PIS, COFINS e projeções tributárias.

✍️ Autor e CréditosAutor: Marcelo Antonio Lázzaro Carli
Linguagem: Harbour / Clipper Bibliotecas: LibHaru (harupdf) / HBZEBRA

📜 LicençaEste projeto é disponibilizado sob a licença MIT (ou de acordo com a política de distribuição da sua organização). Sinta-se à vontade para utilizar, modificar e integrar ao seu software ERP/Emissor.

# Gerador de DANFSe (NFS-e Nacional) em Harbour

Biblioteca e utilitário em **Harbour** para geração do **DANFSe v1.0 (Documento Auxiliar da Nota Fiscal de Serviço Eletrônica Nacional)** em formato PDF, utilizando a **LibHaru** (`harupdf`) e a **hbzebra**.

📋 Visão Geral

Este projeto disponibiliza uma solução completa em linguagem Harbour para leitura do XML da NFS-e Nacional e renderização do DANFSe conforme os padrões oficiais da Receita Federal / Sefin Nacional.

### Principais Características
- **Layout Padrão Nacional**: Compatível com o leiaute v1.0 da NFS-e Nacional.
- **Suporte à LibHaru**: Utiliza a biblioteca `harupdf` para geração de arquivos PDF leves, rápidos e com elementos vetoriais.
- **Geração de QR Code e Códigos de Barras**: Integração com a biblioteca `hbzebra` para renderização direta do QR Code de consulta pública no PDF.
- **Formatação Automática**: Tratamento de campos de datas, moedas, alíquotas, documentos (CNPJ/CPF), CEP e quebra automática de textos longos (descrição dos serviços).
- **Tratamento Multilinguagem e Encodings**: Configuração de codificação PTISO / WinAnsiEncoding com suporte completo a caracteres acentuados.

📁 Estrutura dos Arquivos

| Arquivo | Descrição |
| :--- | :--- |
| `demo_danfse.prg` | Programa de demonstração (ponto de entrada `PROCEDURE Main()`) para configuração do ambiente e chamada da geração do PDF. |
| `danfse.prg` | Função principal (`Danfse(cArquivo, cFilePdf)`) responsável pelo *parser* do XML e montagem dos quadros do DANFSe. |
| `funcao_pdf.prg` | Biblioteca de rotinas de suporte para interação com a LibHaru (desenho de caixas, linhas, textos centralizados/alinhados, código de barras e QR Code). |

🛠️ Pré-requisitos e Dependências

Para compilar e executar este projeto, você precisará de:

1. **Compilador Harbour** (versão 3.2.0dev ou superior / Harbour build 24.05+).
2. **LibHaru** (`harupdf.ch` e biblioteca `libhpdf`).
3. **HBZEBRA** (`hbzebra.ch` inclusa na distribuição padrão do Harbour).

🚀 Como Usar

1. Inicialização e Chamada (Exemplo baseado no `demo_danfse.prg`)

Código: Selecionar todos

/*****************************************************************************
 * PROGRAMA : DEMO_DANFSE.PRG                                                *
 * OBJETIVO : Demo para Gerar DANFE Simplificada (NFS-e Nacional)            *
 *****************************************************************************/

PROCEDURE Main()
   Local cFilePdf := ""

   // Configuração de Idioma e Codificação de Página
   REQUEST HB_LANG_PT
   REQUEST HB_CODEPAGE_PTISO
   REQUEST HB_CODEPAGE_PT850  &&& Para indexação/tratamento de acentuados
   HB_LangSelect("PT")

   // Configurações Padrão do Ambiente Harbour
   Set Wrap On
   Set Talk Off
   Set Date Briti             &&& Data no formato dd/mm/aaaa
   Set Dele On                &&& Ignora registros deletados
   Set Score Off
   Set Exact On
   Setcancel(.F.)             &&& Evita cancelamento via ALT + C
   Set Cent On                &&& Ano com 4 dígitos
   Set Epoch to 2000          &&& Ano a partir de 2000
   Set Excl Off               &&& Compartilhado
   Set(_SET_DEBUG, .F.)

   // Executa a geração do PDF passando o XML e o nome de saída (opcional)
   cFilePdf := Danfse("35503081210229311000180000000000406626072254464195.xml", cFilePdf)

   If Left(cFilePdf, 4) == "Erro"
      ? ("Falha na geração do PDF: " + cFilePdf + hb_Eol())
   Else
      ? ("DANFSe gerado com sucesso: " + cFilePdf + hb_Eol())
   Endif
RETURN
2. Assinatura da Função Principal (danfse.prg)

Snippet de código

Function Danfse(cArquivoXml, cFilePdf)
cArquivoXml: Caminho do arquivo XML no disco ou a string contendo o XML da NFS-e Nacional.cFilePdf: (Opcional) Nome/caminho do arquivo PDF de saída. Se omitido ou em branco, a rotina gerará um arquivo com o nome danfse_<chave_acesso>.pdf

📊 Estrutura do DANFSe Gerado

O documento PDF abrange todas as seções estipuladas pelo padrão nacional:
Cabeçalho: Logotipo da NFS-e Nacional, Chave de Acesso, Número da NFS-e, Número da DPS, Competência, Tipo de Emissão e QR Code para consulta no portal oficial.Identificação dos Envolvidos: Blocos do Prestador/Fornecedor, Tomador/Adquirente e Destinatário da Operação.Serviço Prestado: Código de Tributação Nacional/Municipal, Código NBS, Local de Prestação e Descrição Completa do Serviço.Tributação Municipal (ISSQN): Base de cálculo, Alíquota, Valor do Serviço, Retenções e Descontos.Tributação Federal & Reforma Tributária (IBS/CBS): Retenções de impostos federais e projeções tributárias.

✍️ Autor e CréditosAutor: Marcelo Antonio Lázzaro Carli
Linguagem: Harbour Bibliotecas: LibHaru (harupdf) / HBZEBRA

📜 LicençaEste projeto é disponibilizado para integração em sistemas ERP e de emissão fiscal em Harbour. Sinta-se à vontade para utilizar e modificar conforme as necessidades do seu software.