nfse-br / danfse
Gerador de DANFSe Nacional (NFS-e padrão SPED) a partir de XML validado via XSD oficial
v1.0.2
2026-02-04 14:55 UTC
Requires
- php: >=8.1
- tecnickcom/tcpdf: ^6.10
Requires (Dev)
- phpunit/phpunit: ^10.5
This package is not auto-updated.
Last update: 2026-04-02 14:14:20 UTC
README
Biblioteca PHP para gerar DANFSe Nacional (PDF) a partir de um XML de NFS-e Nacional (SPED), com:
- validação contra o XSD oficial;
- parsing com namespace SPED;
- renderização do PDF com TCPDF.
Requisitos
- PHP 8.1+
- Extensões:
dom,libxml
Instalação
1) Via Packagist (recomendado)
composer require nfse-br/danfse
Depois:
composer update
Orientação de uso
Danfse::gerar(string $xml): stringretorna o binário do PDF (o usuário decide se escreve em disco ou faz stream/download).Danfse::gerarParaArquivo(string $xml, string $outputPdf): voidescreve o PDF em disco.Danfse::gerarDeArquivo(string $xmlPath, string $outputPdf): voidconveniência (lê o XML do arquivo e escreve o PDF).
Configuração
Por padrão, a biblioteca já inclui o XSD em resources/xsd/ e valida o XML automaticamente.
Se você precisar apontar para outro XSD (ex.: outra versão), use o validador diretamente:
use NfseDanfse\Validator\NfseXsdValidator; $validator = new NfseXsdValidator('/caminho/para/NFSe_v1.00.xsd'); $validator->validateXml($xmlString);
Uso (em outro projeto)
Gerar PDF binário (string) a partir do XML (string)
<?php require __DIR__ . '/vendor/autoload.php'; use NfseDanfse\Danfse; $xml = file_get_contents(__DIR__ . '/nfse.xml'); $pdfBinary = (new Danfse())->gerar($xml); file_put_contents(__DIR__ . '/danfse.pdf', $pdfBinary);
Parsing e renderização separadas (uso avançado)
Útil quando você quer inspecionar/alterar os dados antes do PDF:
use NfseDanfse\Parser\DanfseXmlParser; use NfseDanfse\Pdf\DanfsePdfRenderer; use NfseDanfse\Validator\NfseXsdValidator; $xml = file_get_contents(__DIR__ . '/nfse.xml'); (new NfseXsdValidator())->validateXml($xml); $data = DanfseXmlParser::fromXmlString($xml)->parse(); $pdfBinary = (new DanfsePdfRenderer())->renderToString($data);
Uso com Laravel
Instalação
No seu projeto Laravel:
composer require nfse-br/danfse
Controller retornando download sem escrever em disco
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use NfseDanfse\Danfse; class DanfseController extends Controller { public function gerar(Request $request) { $request->validate([ 'xml' => ['required', 'file', 'mimes:xml,txt'], ]); $xml = file_get_contents($request->file('xml')->getRealPath()); $pdfBinary = (new Danfse())->gerar($xml); return response($pdfBinary, 200, [ 'Content-Type' => 'application/pdf', 'Content-Disposition' => 'attachment; filename=\"danfse.pdf\"', ]); } }
Controller (alternativa) gravando em disco e baixando
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use NfseDanfse\Danfse; class DanfseController extends Controller { public function gerar(Request $request) { $request->validate([ 'xml' => ['required', 'file', 'mimes:xml,txt'], ]); $xml = file_get_contents($request->file('xml')->getRealPath()); $outputDir = storage_path('app/danfse'); if (!is_dir($outputDir)) { mkdir($outputDir, 0777, true); } $outputPdf = $outputDir . '/danfse-' . now()->format('YmdHis') . '.pdf'; (new Danfse())->gerarParaArquivo($xml, $outputPdf); return response()->download($outputPdf)->deleteFileAfterSend(true); } }
Artisan Command (XML em arquivo → PDF em storage/app)
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use NfseDanfse\Danfse; class GerarDanfse extends Command { protected $signature = 'danfse:gerar {xml : Caminho do XML} {--out= : Caminho do PDF de saída}'; protected $description = 'Gera DANFSe (PDF) a partir de um XML de NFS-e Nacional'; public function handle(): int { $xmlPath = $this->argument('xml'); $outputPdf = $this->option('out') ?: storage_path('app/danfse.pdf'); (new Danfse())->gerarDeArquivo($xmlPath, $outputPdf); $this->info('PDF gerado em: ' . $outputPdf); return self::SUCCESS; } }
Exemplo pronto
Este repositório inclui um exemplo completo utilizando o XML de amostra:
php examples/gerar-danfse.php
Testes
composer test
Licença
MIT