DANFSe PDF

Há duas formas de gerar o DANFSe:

  1. baixar o PDF pela API oficial;

  2. gerar localmente a partir do XML retornado.

Via API oficial

pdf_bytes = client.download_danfse(
    "13026032242713924000185000000000010626030410654816"
)

Essa rota depende do serviço oficial de DANFSe. Se a API estiver fora do ar, use a geração local.

Geração local

from pynfse_nacional.pdf_generator import (
    HeaderConfig,
    generate_danfse_from_base64,
    generate_danfse_from_xml,
)

response = client.submit_dps(dps)

if response.success and response.nfse_xml_gzip_b64:
    pdf_bytes = generate_danfse_from_base64(
        nfse_xml_gzip_b64=response.nfse_xml_gzip_b64,
        output_path="/caminho/para/danfse.pdf",
    )

Ou, se você já tiver o XML em texto:

pdf_bytes = generate_danfse_from_xml(
    xml_content=response.xml_nfse,
    output_path="/caminho/para/danfse.pdf",
)

Cabeçalho personalizado

header = HeaderConfig(
    image_path="/caminho/para/logo.png",
    title="Nome da Empresa",
    subtitle="Serviços Médicos",
    phone="(11) 99999-9999",
    email="contato@empresa.com",
)

pdf_bytes = generate_danfse_from_base64(
    nfse_xml_gzip_b64=response.nfse_xml_gzip_b64,
    output_path="/caminho/para/danfse.pdf",
    header_config=header,
)

Dependência opcional

Para usar a geração local, instale o extra:

uv add "pynfse-nacional[pdf]"