Uso rápido
Gerando o primeiro PDF
O caminho mais curto é passar o XML autorizado e receber o PDF em uma única chamada:
use DanfseNacional\DanfseGenerator;
$xml = file_get_contents('nfse_autorizada.xml');
$generator = new DanfseGenerator();
$pdf = $generator->generateFromXml($xml);
file_put_contents('danfse.pdf', $pdf);
generateFromXml() retorna o conteúdo binário do PDF (string) — basta gravá-lo em disco, enviá-lo como resposta HTTP, ou passá-lo adiante.
NFS-e com IBS/CBS (Reforma Tributária)
XMLs v1.01 que incluam o grupo IBSCBS (NT 009/2026) fazem a biblioteca renderizar automaticamente a seção de tributação IBS/CBS no DANFSe — sem código extra:
use DanfseNacional\DanfseGenerator;
$xml = file_get_contents('nfse_com_ibs_cbs.xml');
$generator = new DanfseGenerator();
$pdf = $generator->generateFromXml($xml);
file_put_contents('danfse.pdf', $pdf);
A presença da seção é decidida pelo conteúdo do XML, não pela versão dele.
Acesso aos dados antes do PDF
Use parseXml() quando precisar dos dados da NFS-e antes de renderizar (para gravar logs, auditar, exibir em UI etc.):
use DanfseNacional\DanfseGenerator;
$generator = new DanfseGenerator();
$nfse = $generator->parseXml($xml);
echo $nfse->infNFSe->nNFSe; // "10"
echo $nfse->infNFSe->emit->xNome; // "EMPRESA EXEMPLO..."
echo $nfse->infNFSe->valores->vLiq; // "1292.75"
echo $nfse->infNFSe->DPS->infDPS->dCompet; // "2026-01-15"
$pdf = $generator->generatePdf($nfse);
Os campos IBS/CBS também ficam disponíveis quando presentes:
$ibsCbs = $nfse->infNFSe->IBSCBS;
$aliqIBSUF = $ibsCbs->valores?->uf?->pAliqEfetUF;
$aliqCBS = $ibsCbs->valores?->fed?->pAliqEfetCBS;
$vTotalCBS = $ibsCbs->totCIBS?->gCBS?->vCBS;
Veja a referência completa de DTOs para a árvore de objetos e tipos.
Resposta HTTP direta (PHP puro / Laravel)
Em vez de salvar o arquivo em disco, basta devolver a string binária:
// PHP puro
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="danfse.pdf"');
echo $pdf;
// Laravel
return response($pdf, 200, [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="danfse.pdf"',
]);