nfse-br/danfse 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

nfse-br/danfse

最新稳定版本:v1.0.2

Composer 安装命令:

composer require nfse-br/danfse

包简介

Gerador de DANFSe Nacional (NFS-e padrão SPED) a partir de XML validado via XSD oficial

README 文档

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): string retorna o binário do PDF (o usuário decide se escreve em disco ou faz stream/download).
  • Danfse::gerarParaArquivo(string $xml, string $outputPdf): void escreve o PDF em disco.
  • Danfse::gerarDeArquivo(string $xmlPath, string $outputPdf): void conveniê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

统计信息

  • 总下载量: 15
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 3
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-02-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固