npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

gerar-boletos

v2.1.3

Published

Gerar boletos para vários bancos

Readme

🏦 gerar-boletos

Biblioteca Node.js para geração de boletos bancários brasileiros em PDF e PNG com suporte a PIX

NPM Version Downloads License Node Version

📋 Sobre

Biblioteca completa e robusta para geração de boletos bancários em formato PDF e PNG utilizando PDFKit. Suporta os principais bancos brasileiros com validações de código de barras, linha digitável, QR Code PIX e layout padronizado FEBRABAN.

🎯 Novidades

  • Geração de PNG - Converta boletos para imagem diretamente
  • 📱 QR Code PIX - Suporte completo para pagamentos via PIX
  • 🚀 API Simplificada - Código mais limpo com async/await
  • 💾 Stream em Memória - Gere imagens sem arquivos temporários

✨ Bancos Suportados

| Banco | Código | Status | | -------------------------- | ------ | ------------ | | 🏛️ Banco do Brasil | 001 | ✅ Suportado | | 🔴 Bradesco | 237 | ✅ Suportado | | 🔵 Caixa Econômica Federal | 104 | ✅ Suportado | | 🟠 Itaú | 341 | ✅ Suportado | | 🟢 Sicoob | 756 | ✅ Suportado | | 🟡 Sicredi | 748 | ✅ Suportado | | 🔴 Santander | 033 | ✅ Suportado | | 🟣 Ailos (Cecred) | 085 | ✅ Suportado |

🚀 Instalação

npm install gerar-boletos
yarn add gerar-boletos
pnpm add gerar-boletos

Requisitos: Node.js >= 16.0.0

📖 Uso Rápido

Exemplo Básico (PDF + PNG)

const { Bancos, Boletos } = require('gerar-boletos');

// Configurar dados do boleto
const boleto = {
  banco: new Bancos.Bradesco(),
  pagador: {
    nome: 'João Silva',
    RegistroNacional: '12345678900',
    endereco: {
      logradouro: 'Rua Exemplo, 123',
      bairro: 'Centro',
      cidade: 'São Paulo',
      estadoUF: 'SP',
      cep: '01000-000',
    },
  },
  beneficiario: {
    nome: 'Empresa LTDA',
    cnpj: '12345678000199',
    dadosBancarios: {
      carteira: '09',
      agencia: '1234',
      agenciaDigito: '5',
      conta: '567890',
      contaDigito: '1',
      nossoNumero: '12345678',
      nossoNumeroDigito: '9',
    },
    endereco: {
      logradouro: 'Av. Paulista, 1000',
      bairro: 'Bela Vista',
      cidade: 'São Paulo',
      estadoUF: 'SP',
      cep: '01310-100',
    },
  },
  boleto: {
    numeroDocumento: 'DOC-123',
    especieDocumento: 'DM',
    valor: 150.0,
    datas: {
      vencimento: '2025-12-31',
      processamento: '2025-11-09',
      documentos: '2025-11-09',
    },
  },
  instrucoes: [
    'Não aceitar após o vencimento',
    'Multa de 2% após vencimento',
    'Juros de mora de 0,5% ao dia',
  ],
};

// Gerar boleto
const novoBoleto = new Boletos(boleto);
novoBoleto.gerarBoleto();

// Gerar PDF e PNG
async function gerarBoletos() {
  // Gerar PDF
  const { filePath: pdfPath } = await novoBoleto.pdfFile('./boletos', 'bradesco');
  console.log(`PDF: ${pdfPath}`);

  // Gerar PNG
  const pngPaths = await novoBoleto.pngFile('./boletos', 'bradesco', { scale: 2.0 });
  console.log(`PNG: ${pngPaths.join(', ')}`);
}

gerarBoletos();

📱 Boleto com QR Code PIX

const pixEmv = '00020126580014br.gov.bcb.pix0136...'; // String EMV do banco

const boleto = {
  banco: new Bancos.Bradesco(),
  // ... outros dados ...
  boleto: {
    numeroDocumento: 'DOC-123',
    valor: 150.0,
    datas: {
      /* ... */
    },
    // Adicionar PIX
    pixEmv: {
      emv: pixEmv,
      instrucoes: ['Pague via PIX usando o QR Code.'],
    },
  },
};

🖼️ Gerar apenas PNG (sem PDF)

// PNG em arquivo
const pngPaths = await novoBoleto.pngFile('./boletos', 'bradesco', { scale: 2.0 });

// PNG em memória (Buffer)
const images = await novoBoleto.pngBuffer({ scale: 3.0 });
images.forEach(({ page, buffer }) => {
  console.log(`Página ${page}: ${buffer.length} bytes`);
  // Use o buffer como necessário
});

📄 Usando Stream (PDF)

const fs = require('fs');

// Gerar em stream customizado
const stream = fs.createWriteStream('./meu-boleto.pdf');
await novoBoleto.pdfStream(stream);

🎨 API Completa

Métodos Disponíveis

// PDF
await novoBoleto.pdfFile(dir, filename); // Retorna: { boleto, filePath }
await novoBoleto.pdfStream(stream); // Retorna: { boleto }

// PNG
await novoBoleto.pngFile(dir, filename, opts); // Retorna: [filePaths]
await novoBoleto.pngBuffer(opts); // Retorna: [{ page, buffer, mimeType }]

// Opções PNG
// opts = { scale: 2.0 }  // 1.0 a 3.0 (qualidade da imagem)

Configurações Específicas por Banco

🏛️ Banco do Brasil

dadosBancarios: {
  carteira: '17',
  convenio: '1234567',              // 4, 6 ou 7 dígitos
  nossoNumero: '12345678901234567', // 17 dígitos (convênio 7)
  // ou nossoNumero: '12345678901'  // 11 dígitos (convênio 4 ou 6)
}

🔴 Bradesco

dadosBancarios: {
  carteira: '09',
  agencia: '1234',
  conta: '567890',
  nossoNumero: '12345678',  // 8 a 11 dígitos
}

🟡 Sicredi

dadosBancarios: {
  carteira: '1',            // 1 dígito
  agencia: '0123',
  conta: '45678',
  nossoNumero: '12345678',  // 8 dígitos
}

🧪 Testes

A biblioteca possui 184 testes automatizados com 88% de cobertura:

# Executar todos os testes
npm test

# Testes em modo watch
npm run test:watch

# Gerar relatório de cobertura
npm run test:coverage

🛠️ Desenvolvimento

# Clonar repositório
git clone https://github.com/Romulosanttos/gerar-boletos.git
cd gerar-boletos

# Instalar dependências
npm install

# Executar exemplos (gera PDF + PNG com PIX)
npm run gerar:Bradesco   # Gera bradesco.pdf e bradesco.png
npm run gerar:Brasil     # Gera banco-do-brasil.pdf e banco-do-brasil.png
npm run gerar:Cecred     # Gera cecred.pdf e cecred.png
npm run gerar:Sicredi    # Gera sicredi.pdf e sicredi.png
npm run gerar:all        # Gera todos os exemplos

# Linting
npm run lint
npm run lint:fix

# Formatação
npm run format
npm run format:check

📁 Estrutura do Projeto

gerar-boletos/
├── lib/
│   ├── banks/           # Implementações dos bancos
│   ├── core/            # Classes principais (Boleto, Datas, etc)
│   ├── generators/      # Geradores de PDF e código de barras
│   ├── formatters/      # Formatadores de dados
│   ├── validators/      # Validadores
│   └── utils/           # Utilitários
├── examples/            # Exemplos de uso
├── tests/               # Testes automatizados
└── tmp/boletos/         # PDFs gerados (gitignored)

📚 Exemplos

Exemplos completos disponíveis em /examples:

Todos os exemplos geram automaticamente PDF + PNG com QR Code PIX.

🤝 Contribuindo

Contribuições são bem-vindas! Por favor:

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/MinhaFeature)
  3. Commit suas mudanças (git commit -m 'feat: adiciona MinhaFeature')
  4. Push para a branch (git push origin feature/MinhaFeature)
  5. Abra um Pull Request

Padrões de Código

  • ✅ ESLint + Prettier configurados
  • ✅ Testes obrigatórios para novas features
  • ✅ Commits semânticos (feat, fix, docs, etc)
  • ✅ Cobertura mínima de 80%

📄 Licença

Este projeto está licenciado sob GNU AGPL-3.0 - veja o arquivo LICENSE para detalhes.

👤 Autor

📊 Status do Projeto

  • ✅ 336 testes automatizados
  • ✅ 91.9% de cobertura de código
  • ✅ 8 bancos suportados
  • ✅ Geração de PDF e PNG
  • ✅ QR Code PIX integrado
  • ✅ Validação completa de códigos de barras
  • ✅ Layout padronizado FEBRABAN
  • ✅ Stream em memória (sem arquivos temporários)

⭐ Se este projeto foi útil, considere dar uma estrela no GitHub!