gerar-boletos-pdfkit
Version:
Gerar boletos para vários bancos
1,621 lines (1,461 loc) • 48.4 kB
JavaScript
'use strict';
const path = require('path');
const Pdf = require('pdfkit');
const { Base64Encode } = require('base64-stream');
const QRCode = require('qrcode');
const utils = require('../utils/utils');
const gerarLinhaDigitavel = require('./gerador-de-linha-digitavel');
const diretorioDeFontes = path.join(__dirname, '/fontes');
const timesNewRoman = path.join(diretorioDeFontes, 'Times New Roman.ttf');
const timesNewRomanNegrito = path.join(
diretorioDeFontes,
'Times New Roman Bold.ttf'
);
const timesNewRomanItalico = path.join(
diretorioDeFontes,
'Times New Roman Italic.ttf'
);
const timesNewRomanNegritoItalico = path.join(
diretorioDeFontes,
'Times New Roman Bold Italic.ttf'
);
const code25I = path.join(diretorioDeFontes, 'Code25I.ttf');
const pdfDefaults = {
ajusteY: -80,
ajusteX: 0,
autor: '',
titulo: '',
criador: '',
tamanhoDaFonteDoTitulo: 6,
tamanhoDaFontes: 10,
tamanhoDaFonte: 8,
//tamanhoDaLinhaDigitavel: 12,
tamanhoDaLinhaDigitavel: 10,
//tamanhoDoCodigoDeBarras: 32,
tamanhoDoCodigoDeBarras: 25,
imprimirSequenciaDoBoleto: true,
corDoLayout: 'black',
alturaDaPagina: 600,
larguraDaPagina: 844.68,
exibirCampoUnidadeBeneficiaria: false,
template: path.join(__dirname, '/templates/template.pdf'),
informacoesPersonalizadas: function (pdf, x, y) {},
};
async function generateQRCode(text) {
try {
return await QRCode.toDataURL(text); // Gera o QR Code em base64
} catch (err) {
console.error('Erro ao gerar o QR Code:', err);
}
}
function formatCpfCnpj(cpfCnpj) {
if (cpfCnpj.length === 11) {
return cpfCnpj.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4');
} else return false;
}
class GeradorDeBoletoCarne {
constructor(boletos) {
if (!Array.isArray(boletos)) {
boletos = [boletos];
}
this._boletos = boletos;
}
gerarPDF(args) {
return new Promise(async (resolve) => {
function i25(text) {
var start = String.fromCharCode(201),
stop = String.fromCharCode(202);
return (
text.match(/.{2}/g).reduce(function (acc, part) {
var value = parseInt(part, 10),
ascii;
if (value >= 0 && value <= 93) {
ascii = value + 33;
}
if (value >= 94 && value <= 99) {
ascii = value + 101;
}
return acc + String.fromCharCode(ascii);
}, start) + stop
);
}
if (typeof args === 'function') {
args = pdfDefaults;
}
args = utils.merge(pdfDefaults, args);
const boletos = this._boletos;
const informacoesPersonalizadas = args.informacoesPersonalizadas;
const pdf = new Pdf({
size: [args.alturaDaPagina, args.larguraDaPagina],
info: {
Author: args.autor,
Title: args.titulo,
Creator: args.criador,
},
});
if (args.stream) {
pdf.pipe(args.stream);
}
pdf.registerFont('normal', timesNewRoman);
pdf.registerFont('negrito', timesNewRomanNegrito);
pdf.registerFont('italico', timesNewRomanItalico);
pdf.registerFont('negrito-italico', timesNewRomanNegritoItalico);
pdf.registerFont('codigoDeBarras', code25I);
let contador = 1;
let ajusteYInicial = args.ajusteY;
let espacamentoEntreBoletos = 260;
for (const [indice, boleto] of boletos.entries()) {
args.ajusteY = ajusteYInicial + (contador - 1) * espacamentoEntreBoletos;
// DESENHAR LAYOUT
const banco = boleto.getBanco();
const pagador = boleto.getPagador();
const beneficiario = boleto.getBeneficiario();
//var enderecoDoBeneficiario = beneficiario.getEndereco();
const datas = boleto.getDatas();
const codigoDeBarras = boleto._codigoBarras;
const ESPACO_ENTRE_LINHAS = 18;
//const ESPACO_ENTRE_LINHAS = 17;
var zeroLinha = 105;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + zeroLinha)
.lineTo(args.ajusteX + 130, args.ajusteY + zeroLinha)
.stroke(args.corDoLayout);
var zeroLinha1 = 105;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + zeroLinha1)
.lineTo(args.ajusteX + 572, args.ajusteY + zeroLinha1)
.stroke(args.corDoLayout);
var colunaSuperior = 237;
pdf
.moveTo(
args.ajusteX + colunaSuperior,
args.ajusteY + zeroLinha1 - 17,
)
.lineTo(
args.ajusteX + colunaSuperior,
args.ajusteY + zeroLinha1
)
.stroke(args.corDoLayout);
var colunaSuperior1 = colunaSuperior + 33;
pdf
.moveTo(
args.ajusteX + colunaSuperior1,
args.ajusteY + zeroLinha1 - 17,
)
.lineTo(
args.ajusteX + colunaSuperior1,
args.ajusteY + zeroLinha1
)
.stroke(args.corDoLayout);
var linha1 = zeroLinha + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha1)
.lineTo(args.ajusteX + 130, args.ajusteY + linha1)
.stroke(args.corDoLayout);
var linha2 = linha1 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha2)
.lineTo(args.ajusteX + 130, args.ajusteY + linha2)
.stroke(args.corDoLayout);
var linha3 = linha2 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha3)
.lineTo(args.ajusteX + 130, args.ajusteY + linha3)
.stroke(args.corDoLayout);
var linha4 = linha3 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha4)
.lineTo(args.ajusteX + 130, args.ajusteY + linha4)
.stroke(args.corDoLayout);
var linha5 = linha4 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha5)
.lineTo(args.ajusteX + 130, args.ajusteY + linha5)
.stroke(args.corDoLayout);
var linha6 = linha5 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha6)
.lineTo(args.ajusteX + 130, args.ajusteY + linha6)
.stroke(args.corDoLayout);
var linha7 = linha6 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha7)
.lineTo(args.ajusteX + 130, args.ajusteY + linha7)
.stroke(args.corDoLayout);
var linha8 = linha7 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha8)
.lineTo(args.ajusteX + 130, args.ajusteY + linha8)
.stroke(args.corDoLayout);
var linha9 = linha8 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha9)
.lineTo(args.ajusteX + 130, args.ajusteY + linha9)
.stroke(args.corDoLayout);
var linha10 = linha9 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 15, args.ajusteY + linha10)
.lineTo(args.ajusteX + 130, args.ajusteY + linha10)
.stroke(args.corDoLayout);
// CONJUNTO DE LINHA DA zeroLinha1
var Layout2linha1 = zeroLinha1 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + Layout2linha1)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linha1)
.stroke(args.corDoLayout);
var Layout2linha2 = Layout2linha1 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + Layout2linha2)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linha2)
.stroke(args.corDoLayout);
var Layout2linha3 = Layout2linha2 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + Layout2linha3)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linha3)
.stroke(args.corDoLayout);
var Layout2linha4 = Layout2linha3 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + Layout2linha4)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linha4)
.stroke(args.corDoLayout);
var camposLaterais = 450;
var Layout2linhaLateral1 = Layout2linha4 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + camposLaterais,
args.ajusteY + Layout2linhaLateral1
)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linhaLateral1)
.stroke(args.corDoLayout);
var Layout2linhaLateral2 = Layout2linhaLateral1 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + camposLaterais,
args.ajusteY + Layout2linhaLateral2
)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linhaLateral2)
.stroke(args.corDoLayout);
var Layout2linhaLateral3 = Layout2linhaLateral2 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + camposLaterais,
args.ajusteY + Layout2linhaLateral3
)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linhaLateral3)
.stroke(args.corDoLayout);
var Layout2linhaLateral4 = Layout2linhaLateral3 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + camposLaterais,
args.ajusteY + Layout2linhaLateral4
)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linhaLateral4)
.stroke(args.corDoLayout);
var Layout2linhaLateral5 = Layout2linhaLateral4 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + Layout2linhaLateral5)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linhaLateral5)
.stroke(args.corDoLayout);
var Layout2linhaLateral6 =
Layout2linhaLateral5 + +ESPACO_ENTRE_LINHAS + +ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 150, args.ajusteY + Layout2linhaLateral6)
.lineTo(args.ajusteX + 572, args.ajusteY + Layout2linhaLateral6)
.stroke(args.corDoLayout);
////
var colunaLinhaDataDocumento = 207;
pdf
.moveTo(
args.ajusteX + colunaLinhaDataDocumento,
args.ajusteY + Layout2linha2
)
.lineTo(
args.ajusteX + colunaLinhaDataDocumento,
args.ajusteY + Layout2linha3
)
.stroke(args.corDoLayout);
var colunaLinhaDataDocumento1 = colunaLinhaDataDocumento + 60;
pdf
.moveTo(
args.ajusteX + colunaLinhaDataDocumento1,
args.ajusteY + Layout2linha2
)
.lineTo(
args.ajusteX + colunaLinhaDataDocumento1,
args.ajusteY + Layout2linha3
)
.stroke(args.corDoLayout);
var colunaLinhaDataDocumento2 = colunaLinhaDataDocumento1 + 60;
pdf
.moveTo(
args.ajusteX + colunaLinhaDataDocumento2,
args.ajusteY + Layout2linha2
)
.lineTo(
args.ajusteX + colunaLinhaDataDocumento2,
args.ajusteY + Layout2linha3
)
.stroke(args.corDoLayout);
var colunaLinhaDataDocumento3 = colunaLinhaDataDocumento2 + 60;
pdf
.moveTo(
args.ajusteX + colunaLinhaDataDocumento3,
args.ajusteY + Layout2linha2
)
.lineTo(
args.ajusteX + colunaLinhaDataDocumento3,
args.ajusteY + Layout2linha3
)
.stroke(args.corDoLayout);
//
var colunaLinhaUsoDoBanco = 207;
pdf
.moveTo(
args.ajusteX + colunaLinhaUsoDoBanco,
args.ajusteY + Layout2linha3
)
.lineTo(
args.ajusteX + colunaLinhaUsoDoBanco,
args.ajusteY + Layout2linha4
)
.stroke(args.corDoLayout);
var colunaLinhaUsoDoBanco1 = colunaLinhaUsoDoBanco + 60;
pdf
.moveTo(
args.ajusteX + colunaLinhaUsoDoBanco1,
args.ajusteY + Layout2linha3
)
.lineTo(
args.ajusteX + colunaLinhaUsoDoBanco1,
args.ajusteY + Layout2linha4
)
.stroke(args.corDoLayout);
var colunaLinhaUsoDoBanco2 = colunaLinhaUsoDoBanco1 + 60;
pdf
.moveTo(
args.ajusteX + colunaLinhaUsoDoBanco2,
args.ajusteY + Layout2linha3
)
.lineTo(
args.ajusteX + colunaLinhaUsoDoBanco2,
args.ajusteY + Layout2linha4
)
.stroke(args.corDoLayout);
var colunaLinhaUsoDoBanco3 = colunaLinhaUsoDoBanco2 + 60;
pdf
.moveTo(
args.ajusteX + colunaLinhaUsoDoBanco3,
args.ajusteY + Layout2linha3
)
.lineTo(
args.ajusteX + colunaLinhaUsoDoBanco3,
args.ajusteY + Layout2linha4
)
.stroke(args.corDoLayout);
var colunaLateral1 = 450;
pdf
.moveTo(
args.ajusteX + colunaLateral1,
args.ajusteY + zeroLinha1 - 0.5
)
.lineTo(
args.ajusteX + colunaLateral1,
args.ajusteY + Layout2linhaLateral5
)
.stroke(args.corDoLayout);
var colunaLateral2 = 572;
pdf
.moveTo(
args.ajusteX + colunaLateral2,
args.ajusteY + zeroLinha1 - 0.5
)
.lineTo(
args.ajusteX + colunaLateral2,
args.ajusteY + Layout2linhaLateral6
)
.stroke(args.corDoLayout);
//
var margemDaLinhaSeparadoraCorte = 16;
var linhaSeparadora =
Layout2linhaLateral6 + margemDaLinhaSeparadoraCorte + 20;
pdf
.moveTo(args.ajusteX + 27, args.ajusteY + linhaSeparadora)
.lineTo(args.ajusteX + 572, args.ajusteY + linhaSeparadora)
.dash(3, { space: 5 })
.stroke(args.corDoLayout);
var colunaSeparadoraX = 140;
pdf
.moveTo(args.ajusteX + colunaSeparadoraX, args.ajusteY + zeroLinha1 - 17)
.lineTo(args.ajusteX + colunaSeparadoraX, args.ajusteY + linhaSeparadora - 7)
.dash(3, { space: 5 })
.stroke(args.corDoLayout);
/// IMPRIMIR LAYOUT
var titulos = utils.merge(
{
instrucoes: 'Instruções',
informativo: 'INFORMATIVO',
dataDocumento: 'Data Documento',
nomeDoPagador: 'Nome do Cliente',
agenciaECodigoDoBeneficiario: 'Agência / Código do Beneficiário',
nossoNumero: 'Nosso Número',
especie: 'Espécie',
especieDoDocumento: 'Espécie Doc.',
quantidade: 'Quantidade',
numeroDoDocumento: 'Nº do Documento',
dataDeProcessamento: 'Data Processamento',
valorDoDocumento: 'Valor do Documento',
valor: 'Valor',
carteira: 'Carteira',
moraMulta: '(+) Mora / Multa / Juros',
localDoPagamento: 'Local do Pagamento',
igualDoValorDoDocumento: '(=) ',
},
banco.titulos || {}
);
var margemDaLinhaSeparadora = 16,
divisoresVerticais = linha1 + 2 * margemDaLinhaSeparadora - 4,
margemDoSegundoBloco = 25,
margemDoSegundoBlocoLayout = margemDoSegundoBloco - 4,
alturaDoLogotipoDoBanco = 15;
var linha001 = divisoresVerticais + alturaDoLogotipoDoBanco + 4;
const linhaDigitavel = gerarLinhaDigitavel(boleto._linhaDigitavel);
const logoSupeirior = zeroLinha - 17.25;
const logoSupeirior1 = zeroLinha1 - 17.25;
pdf.image(
banco.getImagem(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + logoSupeirior,
{
height: alturaDoLogotipoDoBanco,
}
);
banco.imprimirNome &&
pdf
.font('negrito')
.fontSize(args.tamanhoDaLinhaDigitavel)
.text(
banco.nome,
args.ajusteX + margemDoSegundoBlocoLayout + 26,
args.ajusteY + linha1,
{
lineBreak: false,
width: 100,
align: 'left',
}
);
pdf.image(
banco.getImagem(),
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + logoSupeirior1,
{
height: alturaDoLogotipoDoBanco,
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaLinhaDigitavel)
.text(
banco.getNumeroFormatadoComDigito(),
args.ajusteX + margemDoSegundoBlocoLayout + 220,
args.ajusteY + logoSupeirior1 + 4,
{
lineBreak: false,
//width: 39.8,
align: 'center',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaLinhaDigitavel)
.text(
linhaDigitavel,
args.ajusteX + margemDoSegundoBlocoLayout + 260,
args.ajusteY + logoSupeirior1 + 4,
{
lineBreak: false,
width: 400,
// align: 'right',
}
);
//var tamanhoDasCelulasADireita = 124.5;
var tamanhoDasCelulasADireita = 104.5;
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'Vencimento',
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + zeroLinha,
{
lineBreak: false,
// width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFontes)
.text(
datas.getVencimentoFormatado(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + zeroLinha + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.agenciaECodigoDoBeneficiario,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha1,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
banco.getAgenciaECodigoBeneficiario(boleto),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha1 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.nossoNumero,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
beneficiario._nossoNumero,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha2 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.igualDoValorDoDocumento + titulos.valorDoDocumento,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha3,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFontes)
.text(
boleto.getValorFormatadoBRL(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha3 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(-) Desconto / Abatimento',
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha4,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorDescontosFormatadoBRL(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha4 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.moraMulta,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha6,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorMoraMultaJurosFormatadoBRL(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha6 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(-) Outras Deduções',
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha5,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorDeducoesFormatadoBRL(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha5 + 7,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(+) Outros Acréscimos',
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha7,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(=) Valor Cobrado',
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha8,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorCobradoFormatadoBRL(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha8 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getNumeroDoDocumentoFormatado(),
args.ajusteX + margemDoSegundoBlocoLayout ,
args.ajusteY + linha9 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.numeroDoDocumento,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha9,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text('Pagador', args.ajusteX + 20, args.ajusteY + linha10, {
lineBreak: false,
width: 294,
align: 'left',
});
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
pagador.getNomeSomente(),
args.ajusteX + 20,
args.ajusteY + linha10 + 7,
{
lineBreak: true,
width: 100,
align: 'left',
}
);
//lado 2
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.localDoPagamento,
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + zeroLinha1,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
boleto
.getLocaisDePagamento()
.forEach(function (localDePagamento, indice) {
if (indice > 1) {
return;
}
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo +2)
.text(
localDePagamento,
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY +
(zeroLinha1 +
args.tamanhoDaFonte +
indice * args.tamanhoDaFonte),
{
lineBreak: false,
width: 400,
align: 'left',
}
);
});
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'Beneficiário',
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linha1,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte - 1)
.text(
beneficiario.getIdentificacaoCompleta(),
args.ajusteX + margemDoSegundoBlocoLayout + 175,
args.ajusteY + Layout2linha1,
{
lineBreak: false,
width: 285,
align: 'left',
}
);
// linha data do documento
var tituloDataDocumento = margemDoSegundoBlocoLayout + 135;
var tituloNumeroDoDocumento = tituloDataDocumento + 58,
tituloCip = tituloNumeroDoDocumento + 110;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.dataDocumento,
args.ajusteX + tituloDataDocumento,
args.ajusteY + Layout2linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
datas.getDocumentoFormatado(),
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linha2 + 7,
{
lineBreak: false,
width: 61.5,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getNumeroDoDocumentoFormatado(),
args.ajusteX + margemDoSegundoBlocoLayout + 135 + 65,
args.ajusteY + Layout2linha2 + 7,
{
lineBreak: false,
width: 84,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.numeroDoDocumento,
args.ajusteX + tituloNumeroDoDocumento,
args.ajusteY + Layout2linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var tituloEspecieDoc = tituloNumeroDoDocumento + 60;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.especieDoDocumento,
args.ajusteX + tituloEspecieDoc,
args.ajusteY + Layout2linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getEspecieDocumento(),
args.ajusteX + margemDoSegundoBloco + 68 + 90 + 70,
args.ajusteY + Layout2linha2 + 7,
{
lineBreak: false,
width: 81,
align: 'center',
}
);
var tituloAceite = tituloEspecieDoc + 70;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'Aceite',
args.ajusteX + tituloAceite,
args.ajusteY + Layout2linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getAceiteFormatado(),
args.ajusteX + margemDoSegundoBloco + 68 + 90 + 145,
args.ajusteY + Layout2linha2 + 7,
{
lineBreak: false,
width: 55,
align: 'center',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
datas.getProcessamentoFormatado(),
args.ajusteX + margemDoSegundoBloco + 68 + 90 + 215,
args.ajusteY + Layout2linha2 + 7,
{
lineBreak: false,
width: 93.5,
align: 'left',
}
);
var tituloDataProcessamento = tituloAceite + 50;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.dataDeProcessamento,
args.ajusteX + tituloDataProcessamento,
args.ajusteY + Layout2linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
// linha Uso do banco
var tituloUsoDoBancoX = margemDoSegundoBloco + 135;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'Uso do Banco',
args.ajusteX + tituloUsoDoBancoX,
args.ajusteY + Layout2linha3,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var tituloCarteira = tituloUsoDoBancoX + 65;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.carteira,
args.ajusteX + tituloCarteira,
args.ajusteY + Layout2linha3,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
banco.getCarteiraTexto(beneficiario),
args.ajusteX + margemDoSegundoBlocoLayout + 135 + 44,
args.ajusteY + Layout2linha3 + 7,
{
lineBreak: false,
width: 71,
align: 'center',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getEspecieMoeda(),
args.ajusteX + margemDoSegundoBloco + 135 + 100,
args.ajusteY + Layout2linha3 + 7,
{
lineBreak: false,
width: 71,
align: 'center',
}
);
var tituloEspecieMoeda = tituloCarteira + 60;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.especie,
args.ajusteX + tituloEspecieMoeda,
args.ajusteY + Layout2linha3,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var tituloQuantidadeMoeda = tituloEspecieMoeda + 60;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.quantidade,
args.ajusteX + tituloQuantidadeMoeda,
args.ajusteY + Layout2linha3,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var tituloValorMoeda = tituloQuantidadeMoeda + 65;
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.valor,
args.ajusteX + tituloValorMoeda,
args.ajusteY + Layout2linha3,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
// linha instrucoes
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.instrucoes,
args.ajusteX + margemDoSegundoBloco + 135,
args.ajusteY + Layout2linha4,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var instrucaoY = Layout2linha4 + 12;
boleto.getInstrucoes().forEach(function (instrucao, indice) {
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
instrucao,
args.ajusteX + margemDoSegundoBloco + 135,
args.ajusteY + instrucaoY + indice * args.tamanhoDaFonte,
{
lineBreak: false,
width: 400,
align: 'left',
}
);
});
// lateral
var colunaLateralDireita = 455;
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'Vencimento',
args.ajusteX + colunaLateralDireita,
args.ajusteY + zeroLinha1 + 1,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFontes)
.text(
datas.getVencimentoFormatado(),
args.ajusteX + colunaLateralDireita,
args.ajusteY + zeroLinha1 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.agenciaECodigoDoBeneficiario,
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha1 + 1,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
banco.getAgenciaECodigoBeneficiario(boleto),
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha1 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.nossoNumero,
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
beneficiario._nossoNumero,
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha2 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.igualDoValorDoDocumento + titulos.valorDoDocumento,
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha3,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFontes)
.text(
boleto.getValorFormatadoBRL(),
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha3 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(-) Desconto / Abatimento',
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha4,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorDescontosFormatadoBRL(),
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linha4 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(-) Outras Deduções',
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral1,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorDeducoesFormatadoBRL(),
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral1 + 7,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.moraMulta,
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral2,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorMoraMultaJurosFormatadoBRL(),
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral2 + 7,
{
lineBreak: false,
width:tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(+) Outros Acréscimos',
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral3,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('normal')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'(=) Valor Cobrado',
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral4,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorCobradoFormatadoBRL(), // Exibe apenas se o valor for válido
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral4 + 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
'Pagador',
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linhaLateral5,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var cpfCnpj = formatCpfCnpj(pagador._registroNacional);
if (!cpfCnpj) {
cpfCnpj = '';
} else {
cpfCnpj = `(CPF: ${cpfCnpj})`;
}
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte) // TODO: Diminuir tamanho da fonte caso seja maior que X caracteres
.text(
pagador.getIdentificacao(),
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linhaLateral5 + 7,
{
lineBreak: false,
width: 294,
align: 'left',
}
);
var enderecoDoPagador = pagador.getEndereco();
if (enderecoDoPagador) {
var espacamento = args.tamanhoDaFonte;
if (enderecoDoPagador.getPrimeiraLinha()) {
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
enderecoDoPagador.getPrimeiraLinha(),
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linhaLateral5 + 10 + espacamento,
{
lineBreak: false,
width: 535,
align: 'left',
}
);
espacamento += espacamento;
}
if (enderecoDoPagador.getSegundaLinha()) {
pdf
.font('normal')
.fontSize(args.tamanhoDaFonte)
.text(
enderecoDoPagador.getSegundaLinha(),
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linhaLateral5 + 10 + espacamento,
{
lineBreak: false,
width: 535,
align: 'left',
}
);
}
}
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo + 1)
.text(
'Autenticação Mecânica',
args.ajusteX + colunaLateralDireita + 12,
args.ajusteY + Layout2linhaLateral6 +7 ,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'left',
}
);
pdf
.font('negrito')
.fontSize(args.tamanhoDaFonteDoTitulo + 1)
.text(
'FICHA DE COMPENSAÇÃO',
args.ajusteX + colunaLateralDireita,
args.ajusteY + Layout2linhaLateral6 ,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: 'right',
}
);
//
pdf
.font('codigoDeBarras')
.fontSize(args.tamanhoDoCodigoDeBarras)
.text(
i25(codigoDeBarras),
args.ajusteX + margemDoSegundoBlocoLayout + 135,
args.ajusteY + Layout2linhaLateral6 + 4.5,
{
lineBreak: false,
width: 345,
align: 'left',
}
);
informacoesPersonalizadas(
pdf,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY +
Layout2linhaLateral6 +
args.tamanhoDoCodigoDeBarras +
10
);
if (contador === 3 && indice < boletos.length - 1) {
pdf.addPage();
pdf.undash();
contador = 1;
args.ajusteY = ajusteYInicial;
} else {
pdf.undash();
contador++;
}
args.ajusteY = ajusteYInicial;
}
if (args.base64) {
var finalString = '';
var stream = pdf.pipe(new Base64Encode());
pdf.end();
stream.on('data', function (chunk) {
finalString += chunk;
});
stream.on('end', function () {
resolve(finalString);
});
} else {
pdf.end();
resolve(pdf);
}
});
}
gerarLinhaDigitavel() {
return new Promise((resolve) => {
const boletos = this._boletos;
const linhaDigitavel = [];
boletos.forEach((boleto, indice) => {
const banco = boleto.getBanco();
const numeroDocumento = boleto.getNumeroDoDocumentoFormatado();
const linha = gerarLinhaDigitavel(
banco.geraCodigoDeBarrasPara(boleto),
banco
);
if (indice <= boletos.length - 1) {
linhaDigitavel.push({ linha, numeroDocumento });
}
});
resolve(linhaDigitavel);
});
}
}
module.exports = GeradorDeBoletoCarne;