@adonisinoda/gerar-boletos
Version:
Gerar boletos para vários bancos
1,631 lines (1,471 loc) • 55.2 kB
JavaScript
"use strict";
const path = require("path");
const StringUtils = require("../utils/string-utils");
const ObjectUtils = require("../utils/object-utils");
const Pdf = require("pdfkit");
const { Base64Encode } = require("base64-stream");
const GeradorDeLinhaDigitavel = 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");
var GeradorDeBoleto = (function () {
function GeradorDeBoleto(boletos) {
if (!Array.isArray(boletos)) {
boletos = [boletos];
}
this._boletos = boletos;
}
const pdfDefaults = {
ajusteY: -80,
ajusteX: 0,
autor: "",
titulo: "",
criador: "",
tamanhoDaFonteDoTitulo: 8,
tamanhoDaFonte: 10,
tamanhoDaLinhaDigitavel: 14,
tamanhoDoCodigoDeBarras: 32,
imprimirSequenciaDoBoleto: true,
corDoLayout: "black",
alturaDaPagina: 595.44,
larguraDaPagina: 841.68,
exibirCampoUnidadeBeneficiaria: false,
template: path.join(__dirname, "/templates/template.pdf"),
informacoesPersonalizadas: function (pdf, x, y) {},
};
GeradorDeBoleto.prototype.gerarPDF = function (args) {
return new Promise((resolve) => {
if (typeof args === "function") {
args = pdfDefaults;
}
args = ObjectUtils.merge(pdfDefaults, args);
let finalString = "";
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);
boletos.forEach(function escreveOsDadosDoBoleto(boleto, indice) {
// DESENHAR LAYOUT
const banco = boleto.getBanco();
const pagador = boleto.getPagador();
const beneficiario = boleto.getBeneficiario();
var enderecoDoBeneficiario = beneficiario.getEndereco();
const datas = boleto.getDatas();
const ESPACO_ENTRE_LINHAS = 23;
var linha1 = 151;
pdf
.moveTo(args.ajusteX + 27, args.ajusteY + linha1)
.lineTo(args.ajusteX + 572, args.ajusteY + linha1)
.stroke(args.corDoLayout);
var linha2 = linha1 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 27, args.ajusteY + linha2)
.lineTo(args.ajusteX + 572, args.ajusteY + linha2)
.stroke(args.corDoLayout);
var linha3 = linha2 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 27, args.ajusteY + linha3)
.lineTo(
args.ajusteX + (banco.exibirReciboDoPagadorCompleto() ? 572 : 329),
args.ajusteY + linha3
)
.stroke(args.corDoLayout);
if (banco.exibirReciboDoPagadorCompleto()) {
var linha4Opcional = linha3 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + 27, args.ajusteY + linha4Opcional)
.lineTo(args.ajusteX + 329, args.ajusteY + linha4Opcional)
.stroke(args.corDoLayout);
}
var coluna1 = 27;
pdf
.moveTo(args.ajusteX + coluna1, args.ajusteY + linha1 - 0.5)
.lineTo(
args.ajusteX + coluna1,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto()
? linha4Opcional
: linha3) +
0.5
)
.stroke(args.corDoLayout);
var coluna2 = 329;
pdf
.moveTo(args.ajusteX + coluna2, args.ajusteY + linha1)
.lineTo(
args.ajusteX + coluna2,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto()
? linha4Opcional
: linha3) +
0.5
)
.stroke(args.corDoLayout);
var coluna3 = 178;
pdf
.moveTo(args.ajusteX + coluna3, args.ajusteY + linha2)
.lineTo(
args.ajusteX + coluna3,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto() ? linha4Opcional : linha3)
)
.stroke(args.corDoLayout);
var coluna4 = 420;
pdf
.moveTo(args.ajusteX + coluna4, args.ajusteY + linha1)
.lineTo(
args.ajusteX + coluna4,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto() ? linha3 : linha2)
)
.stroke(args.corDoLayout);
var coluna5 = 572;
pdf
.moveTo(args.ajusteX + coluna5, args.ajusteY + linha1 - 0.5)
.lineTo(
args.ajusteX + coluna5,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto() ? linha3 : linha2) +
0.5
)
.stroke(args.corDoLayout);
var coluna6 = coluna2 + 4;
pdf
.moveTo(
args.ajusteX + coluna6,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto() ? linha3 : linha2) +
3.5
)
.lineTo(
args.ajusteX + coluna6,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto()
? linha4Opcional
: linha3) +
0.5
)
.stroke(args.corDoLayout);
if (banco.exibirReciboDoPagadorCompleto()) {
var coluna6Opcional = coluna3;
pdf
.moveTo(args.ajusteX + coluna6Opcional, args.ajusteY + linha3 - 0.5)
.lineTo(
args.ajusteX + coluna6Opcional,
args.ajusteY + linha4Opcional + 0.5
)
.stroke(args.corDoLayout);
var coluna8Opcional = coluna1 + 75.5;
pdf
.moveTo(args.ajusteX + coluna8Opcional, args.ajusteY + linha2 - 0.5)
.lineTo(args.ajusteX + coluna8Opcional, args.ajusteY + linha3 + 0.5)
.stroke(args.corDoLayout);
}
var coluna7 = coluna5;
pdf
.moveTo(
args.ajusteX + coluna7,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto() ? linha3 : linha2) +
3.5
)
.lineTo(
args.ajusteX + coluna7,
args.ajusteY +
(banco.exibirReciboDoPagadorCompleto()
? linha4Opcional
: linha3) +
0.5
)
.stroke(args.corDoLayout);
var linha4 =
(banco.exibirReciboDoPagadorCompleto() ? linha3 : linha2) + 4;
pdf
.moveTo(args.ajusteX + coluna6, args.ajusteY + linha4)
.lineTo(args.ajusteX + coluna7, args.ajusteY + linha4)
.stroke(args.corDoLayout);
//////////////////
var margemDaLinhaSeparadora = 30,
divisoresVerticais =
(linha4Opcional || linha3) + 2 * margemDaLinhaSeparadora - 4,
margemDoSegundoBloco = 30,
margemDoSegundoBlocoLayout = margemDoSegundoBloco - 4,
alturaDoLogotipoDoBanco = 23;
var linha21 = divisoresVerticais + alturaDoLogotipoDoBanco + 4;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha21
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var linha22 = linha21 + ESPACO_ENTRE_LINHAS + 8;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha22
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha22)
.stroke(args.corDoLayout);
var linha23 = linha22 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha23
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha23)
.stroke(args.corDoLayout);
var linha24 = linha23 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha24
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha24)
.stroke(args.corDoLayout);
var linha25 = linha24 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha25
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha25)
.stroke(args.corDoLayout);
var camposLaterais = 434,
linha26 = linha25 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha26)
.lineTo(args.ajusteX + 571, args.ajusteY + linha26)
.stroke(args.corDoLayout);
var linha27 = linha26 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha27)
.lineTo(args.ajusteX + 571, args.ajusteY + linha27)
.stroke(args.corDoLayout);
var linha28 = linha27 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha28)
.lineTo(args.ajusteX + 571, args.ajusteY + linha28)
.stroke(args.corDoLayout);
if (args.exibirCampoUnidadeBeneficiaria) {
var linha28_2 = linha28 + 12.4;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha28_2
)
.lineTo(args.ajusteX + camposLaterais, args.ajusteY + linha28_2)
.stroke(args.corDoLayout);
}
var linha29 = linha28 + ESPACO_ENTRE_LINHAS;
pdf
.moveTo(args.ajusteX + camposLaterais, args.ajusteY + linha29)
.lineTo(args.ajusteX + 571, args.ajusteY + linha29)
.stroke(args.corDoLayout);
var linha211 = linha29 + ESPACO_ENTRE_LINHAS + 0.4;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha211
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha211)
.stroke(args.corDoLayout);
var linha212 = linha211 + 56.6;
pdf
.moveTo(
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha212
)
.lineTo(args.ajusteX + 571, args.ajusteY + linha212)
.stroke(args.corDoLayout);
var coluna21 = margemDoSegundoBlocoLayout + 0.5;
pdf
.moveTo(args.ajusteX + coluna21, args.ajusteY + linha21)
.lineTo(args.ajusteX + coluna21, args.ajusteY + linha212)
.stroke(args.corDoLayout);
var coluna22 = 571 - 0.5;
pdf
.moveTo(args.ajusteX + coluna22, args.ajusteY + linha21)
.lineTo(args.ajusteX + coluna22, args.ajusteY + linha212)
.stroke(args.corDoLayout);
var coluna23 = camposLaterais;
pdf
.moveTo(args.ajusteX + coluna23, args.ajusteY + linha21)
.lineTo(args.ajusteX + coluna23, args.ajusteY + linha211)
.stroke(args.corDoLayout);
var coluna24 = 93.5;
pdf
.moveTo(args.ajusteX + coluna24, args.ajusteY + linha23)
.lineTo(args.ajusteX + coluna24, args.ajusteY + linha24)
.stroke(args.corDoLayout);
if (banco.exibirCampoCip()) {
pdf
.moveTo(args.ajusteX + coluna24, args.ajusteY + linha24)
.lineTo(args.ajusteX + coluna24, args.ajusteY + linha25)
.stroke(args.corDoLayout);
}
var coluna25 = coluna24 + 92.5;
pdf
.moveTo(args.ajusteX + coluna25, args.ajusteY + linha23)
.lineTo(args.ajusteX + coluna25, args.ajusteY + linha24)
.stroke(args.corDoLayout);
var coluna26 = coluna25 + 84.5;
pdf
.moveTo(args.ajusteX + coluna26, args.ajusteY + linha23)
.lineTo(args.ajusteX + coluna26, args.ajusteY + linha24)
.stroke(args.corDoLayout);
var coluna27 = coluna26 + 61;
pdf
.moveTo(args.ajusteX + coluna27, args.ajusteY + linha23)
.lineTo(args.ajusteX + coluna27, args.ajusteY + linha24)
.stroke(args.corDoLayout);
var coluna28 = margemDoSegundoBlocoLayout + 106;
pdf
.moveTo(args.ajusteX + coluna28, args.ajusteY + linha24)
.lineTo(args.ajusteX + coluna28, args.ajusteY + linha25)
.stroke(args.corDoLayout);
var coluna29 = coluna28 + 76.5;
pdf
.moveTo(args.ajusteX + coluna29, args.ajusteY + linha24)
.lineTo(args.ajusteX + coluna29, args.ajusteY + linha25)
.stroke(args.corDoLayout);
var coluna210 = coluna29 + 77;
pdf
.moveTo(args.ajusteX + coluna210, args.ajusteY + linha24)
.lineTo(args.ajusteX + coluna210, args.ajusteY + linha25)
.stroke(args.corDoLayout);
var coluna211 = coluna210 + 92;
pdf
.moveTo(args.ajusteX + coluna211, args.ajusteY + linha24)
.lineTo(args.ajusteX + coluna211, args.ajusteY + linha25)
.stroke(args.corDoLayout);
var coluna212 = 154;
pdf
.moveTo(args.ajusteX + coluna212, args.ajusteY + divisoresVerticais)
.lineTo(args.ajusteX + coluna212, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var coluna213 = coluna212 + 1;
pdf
.moveTo(args.ajusteX + coluna213, args.ajusteY + divisoresVerticais)
.lineTo(args.ajusteX + coluna213, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var coluna214 = coluna213 + 1;
pdf
.moveTo(args.ajusteX + coluna214, args.ajusteY + divisoresVerticais)
.lineTo(args.ajusteX + coluna214, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var coluna215 = coluna214 + 41.5;
pdf
.moveTo(args.ajusteX + coluna215, args.ajusteY + divisoresVerticais)
.lineTo(args.ajusteX + coluna215, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var coluna216 = coluna215 + 1;
pdf
.moveTo(args.ajusteX + coluna216, args.ajusteY + divisoresVerticais)
.lineTo(args.ajusteX + coluna216, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var coluna217 = coluna216 + 1;
pdf
.moveTo(args.ajusteX + coluna217, args.ajusteY + divisoresVerticais)
.lineTo(args.ajusteX + coluna217, args.ajusteY + linha21)
.stroke(args.corDoLayout);
var linhaSeparadora =
(linha4Opcional || linha3) + margemDaLinhaSeparadora;
pdf
.moveTo(args.ajusteX + 27, args.ajusteY + linhaSeparadora)
.lineTo(args.ajusteX + 572, args.ajusteY + linhaSeparadora)
.dash(3, { space: 5 })
.stroke(args.corDoLayout);
var caminhoParaTesoura = path.join(__dirname, "imagens/tesoura128.png");
pdf.image(
caminhoParaTesoura,
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linhaSeparadora - 3.2,
{
width: 10,
}
);
/// IMPRIMIR LAYOUT
var titulos = ObjectUtils.merge(
{
instrucoes: "Instruções",
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",
localDoPagamento: "Local do Pagamento",
igualDoValorDoDocumento: "(=) ",
},
banco.getTitulos ? banco.getTitulos() : {}
);
args.creditos &&
pdf
.font("italico")
.fontSize(8)
.text(args.creditos, args.ajusteX + 3, args.ajusteY + 90, {
width: 560,
align: "center",
});
var zeroLinha = 105;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text("BENEFICIÁRIO:", args.ajusteX + 27, args.ajusteY + zeroLinha, {
lineBreak: false,
width: 294,
align: "left",
});
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
beneficiario.getIdentificacao().toUpperCase(),
args.ajusteX + 27,
args.ajusteY + zeroLinha + args.tamanhoDaFonte + 1.5,
{
lineBreak: false,
width: 545,
align: "left",
}
);
var enderecoDoBeneficiario = beneficiario.getEndereco();
if (enderecoDoBeneficiario) {
var zeroUmLinha =
zeroLinha + 2 + args.tamanhoDaFonte + args.tamanhoDaFonte,
zeroDoisLinha = zeroUmLinha + 1 + args.tamanhoDaFonte;
if (enderecoDoBeneficiario.getPrimeiraLinha()) {
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
enderecoDoBeneficiario.getPrimeiraLinha(),
args.ajusteX + 27,
args.ajusteY + zeroUmLinha,
{
lineBreak: false,
width: 545,
align: "left",
}
);
espacamento += espacamento;
}
if (enderecoDoBeneficiario.getSegundaLinha()) {
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
enderecoDoBeneficiario.getSegundaLinha(),
args.ajusteX + 27,
args.ajusteY + zeroDoisLinha,
{
lineBreak: false,
width: 545,
align: "left",
}
);
}
}
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"RECIBO DO PAGADOR",
args.ajusteX + 278,
args.ajusteY + zeroLinha,
{
lineBreak: false,
width: 294,
align: "right",
}
);
var primeiraLinha = linha1 + 11,
diferencaEntreTituloEValor = 10,
tituloDaPrimeiraLinha = primeiraLinha - diferencaEntreTituloEValor;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.nomeDoPagador + " " + pagador.getIdUsuario(),
args.ajusteX + 32,
args.ajusteY + tituloDaPrimeiraLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte) // TODO: Diminuir tamanho da fonte caso seja maior que X caracteres
.text(
pagador.getIdentificacao(),
args.ajusteX + 32,
args.ajusteY + primeiraLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Data de Vencimento",
args.ajusteX + 332,
args.ajusteY + tituloDaPrimeiraLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
datas.getVencimentoFormatado(),
args.ajusteX + 332,
args.ajusteY + primeiraLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Valor Cobrado",
args.ajusteX + 424,
args.ajusteY + tituloDaPrimeiraLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
var primeiraLinhaOpcional = primeiraLinha + ESPACO_ENTRE_LINHAS,
tituloDaPrimeiraLinhaOpcional =
primeiraLinhaOpcional - diferencaEntreTituloEValor;
if (banco.exibirReciboDoPagadorCompleto()) {
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.carteira,
args.ajusteX + 32,
args.ajusteY + tituloDaPrimeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
banco.getCarteiraTexto(beneficiario),
args.ajusteX + 32,
args.ajusteY + primeiraLinhaOpcional,
{
lineBreak: false,
width: 40,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.especieDoDocumento,
args.ajusteX + 105,
args.ajusteY + tituloDaPrimeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getEspecieDocumento(),
args.ajusteX + 105,
args.ajusteY + primeiraLinhaOpcional,
{
lineBreak: false,
width: 40,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.numeroDoDocumento,
args.ajusteX + 181,
args.ajusteY + tituloDaPrimeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
StringUtils.pad(
boleto.getNumeroDoDocumentoFormatado(boleto),
8,
"0"
),
args.ajusteX + 181,
args.ajusteY + primeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.valorDoDocumento,
args.ajusteX + 424,
args.ajusteY + tituloDaPrimeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorFormatadoBRL(),
args.ajusteX + 424,
args.ajusteY + primeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
}
var segundaLinha = banco.exibirReciboDoPagadorCompleto()
? primeiraLinhaOpcional + ESPACO_ENTRE_LINHAS
: primeiraLinha + ESPACO_ENTRE_LINHAS,
tituloDaSegundaLinha = segundaLinha - diferencaEntreTituloEValor;
if (banco.exibirReciboDoPagadorCompleto()) {
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.dataDeProcessamento,
args.ajusteX + 332,
args.ajusteY + tituloDaPrimeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
datas.getProcessamentoFormatado(),
args.ajusteX + 332,
args.ajusteY + primeiraLinhaOpcional,
{
lineBreak: false,
width: 294,
align: "left",
}
);
}
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.agenciaECodigoDoBeneficiario,
args.ajusteX + 32,
args.ajusteY + tituloDaSegundaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
banco.getAgenciaECodigoBeneficiario(boleto),
args.ajusteX + 32,
args.ajusteY + segundaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.nossoNumero,
args.ajusteX + 181,
args.ajusteY + tituloDaSegundaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
StringUtils.pad(
banco.getNossoNumeroECodigoDocumento(boleto),
8,
"0"
),
args.ajusteX + 181,
args.ajusteY + segundaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(7)
.text(
"Autenticação Mecânica",
args.ajusteX + 426,
args.ajusteY + segundaLinha - 5,
{
lineBreak: false,
width: 294,
align: "left",
}
);
const segundaLinha2 = linha21 - 20.25;
//codigo interno
// const codigoDeBarras = banco.geraCodigoDeBarrasPara(boleto);
const codigoDeBarras = boleto._codigoDeBarras
const linhaDigitavel = GeradorDeLinhaDigitavel(boleto._codigoDeBarras);
pdf.image(
banco.getImagem(),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + segundaLinha2 - 5,
{
height: alturaDoLogotipoDoBanco,
}
);
banco.getImprimirNome() &&
pdf
.font("negrito")
.fontSize(args.tamanhoDaLinhaDigitavel)
.text(
banco.getNome(),
args.ajusteX + margemDoSegundoBlocoLayout + 26,
args.ajusteY + segundaLinha2,
{
lineBreak: false,
width: 100,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaLinhaDigitavel)
.text(
banco.getNumeroFormatadoComDigito(),
args.ajusteX + margemDoSegundoBlocoLayout + 131,
args.ajusteY + segundaLinha2,
{
lineBreak: false,
width: 39.8,
align: "center",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaLinhaDigitavel)
.text(
linhaDigitavel,
args.ajusteX + margemDoSegundoBlocoLayout + 145,
args.ajusteY + segundaLinha2,
{
lineBreak: false,
width: 400,
align: "right",
}
);
function i25(text) {
// TODO: MUDAR PARA O GAMMAUTILS ASAP
if (text.length % 2 !== 0) {
throw new Error("Text must have an even number of characters");
}
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
);
}
pdf
.font("codigoDeBarras")
.fontSize(args.tamanhoDoCodigoDeBarras)
.text(
i25(codigoDeBarras),
args.ajusteX + margemDoSegundoBlocoLayout,
args.ajusteY + linha212 + 3.5,
{
lineBreak: false,
width: 340,
align: "left",
}
);
var terceiraLinha = segundaLinha2 + 38,
tituloDaTerceiraLinha = terceiraLinha - diferencaEntreTituloEValor,
tituloDaTerceiraLinhaLateral =
terceiraLinha - diferencaEntreTituloEValor,
colunaLateral = 440;
var tituloLocalDoPagamento = margemDoSegundoBloco;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.localDoPagamento,
args.ajusteX + tituloLocalDoPagamento,
args.ajusteY + tituloDaTerceiraLinha - 7,
{
lineBreak: false,
width: 294,
align: "left",
}
);
boleto
.getLocaisDePagamento()
.forEach(function (localDePagamento, indice) {
if (indice > 1) {
return;
}
pdf
.font("normal")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
localDePagamento,
args.ajusteX + margemDoSegundoBloco,
args.ajusteY +
(terceiraLinha +
2 -
args.tamanhoDaFonte +
indice * args.tamanhoDaFonte),
{
lineBreak: false,
width: 400,
align: "left",
}
);
});
var tamanhoDasCelulasADireita = 124.5;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Vencimento",
args.ajusteX + colunaLateral,
args.ajusteY + tituloDaTerceiraLinhaLateral - 7,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
datas.getVencimentoFormatado(),
args.ajusteX + colunaLateral,
args.ajusteY + terceiraLinha,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "right",
}
);
var quartaLinha = terceiraLinha + 24,
tituloDaQuartaLinhaLateral = quartaLinha - diferencaEntreTituloEValor;
var tituloBeneficiario = margemDoSegundoBloco;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Beneficiário",
args.ajusteX + tituloBeneficiario,
args.ajusteY + tituloDaQuartaLinhaLateral,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
beneficiario.getIdentificacao(),
args.ajusteX + margemDoSegundoBloco,
args.ajusteY + quartaLinha,
{
lineBreak: false,
width: 400,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.agenciaECodigoDoBeneficiario,
args.ajusteX + colunaLateral,
args.ajusteY + tituloDaQuartaLinhaLateral,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
banco.getAgenciaECodigoBeneficiario(boleto),
args.ajusteX + colunaLateral,
args.ajusteY + quartaLinha,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "right",
}
);
var quintaLinha = quartaLinha + ESPACO_ENTRE_LINHAS,
tituloDaQuintaLinha = quintaLinha - diferencaEntreTituloEValor,
tituloDaQuintaLinhaLateral = quintaLinha - diferencaEntreTituloEValor;
var tituloDataDocumento = margemDoSegundoBloco;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.dataDocumento,
args.ajusteX + tituloDataDocumento,
args.ajusteY + tituloDaQuintaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
datas.getDocumentoFormatado(),
args.ajusteX + margemDoSegundoBloco,
args.ajusteY + quintaLinha,
{
lineBreak: false,
width: 61.5,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getNumeroDoDocumentoFormatado(),
args.ajusteX + margemDoSegundoBloco + 68,
args.ajusteY + quintaLinha,
{
lineBreak: false,
width: 84,
align: "left",
}
);
var tituloNumeroDoDocumento = tituloDataDocumento + 68,
tituloCip = tituloNumeroDoDocumento;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.numeroDoDocumento,
args.ajusteX + tituloNumeroDoDocumento,
args.ajusteY + tituloDaQuintaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
var tituloEspecieDoc = tituloNumeroDoDocumento + 90;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.especieDoDocumento,
args.ajusteX + tituloEspecieDoc,
args.ajusteY + tituloDaQuintaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getEspecieDocumento(),
args.ajusteX + margemDoSegundoBloco + 68 + 90,
args.ajusteY + quintaLinha,
{
lineBreak: false,
width: 81,
align: "center",
}
);
var tituloAceite = tituloEspecieDoc + 86;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Aceite",
args.ajusteX + tituloAceite,
args.ajusteY + tituloDaQuintaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getAceiteFormatado(),
args.ajusteX + margemDoSegundoBloco + 68 + 90 + 86,
args.ajusteY + quintaLinha,
{
lineBreak: false,
width: 55,
align: "center",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
datas.getProcessamentoFormatado(),
args.ajusteX + margemDoSegundoBloco + 68 + 90 + 86 + 61.5,
args.ajusteY + quintaLinha,
{
lineBreak: false,
width: 93.5,
align: "left",
}
);
var tituloDataProcessamento = tituloAceite + 61;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.dataDeProcessamento,
args.ajusteX + tituloDataProcessamento,
args.ajusteY + tituloDaQuintaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.nossoNumero,
args.ajusteX + colunaLateral,
args.ajusteY + tituloDaQuintaLinhaLateral,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
banco.getNossoNumeroECodigoDocumento(boleto),
args.ajusteX + colunaLateral,
args.ajusteY + quintaLinha,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "right",
}
);
var sextaLinha = quintaLinha + ESPACO_ENTRE_LINHAS,
tituloDaSextaLinha = sextaLinha - diferencaEntreTituloEValor;
var tituloUsoDoBancoX = margemDoSegundoBloco;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Uso do Banco",
args.ajusteX + tituloUsoDoBancoX,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
if (banco.exibirCampoCip()) {
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"CIP",
args.ajusteX + tituloCip,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: 31,
align: "left",
}
);
// TODO: Implementar campo CIP no boleto
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text("", args.ajusteX + tituloCip, args.ajusteY + sextaLinha, {
lineBreak: false,
width: 31,
align: "center",
});
}
var tituloCarteira = tituloUsoDoBancoX + 105;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.carteira,
args.ajusteX + tituloCarteira,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
banco.getCarteiraTexto(beneficiario),
args.ajusteX + margemDoSegundoBloco + 104.5,
args.ajusteY + sextaLinha,
{
lineBreak: false,
width: 71,
align: "center",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getEspecieMoeda(),
args.ajusteX + margemDoSegundoBloco + 104.5 + 77,
args.ajusteY + sextaLinha,
{
lineBreak: false,
width: 71,
align: "center",
}
);
var tituloEspecieMoeda = tituloCarteira + 77;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.especie,
args.ajusteX + tituloEspecieMoeda,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
var tituloQuantidadeMoeda = tituloEspecieMoeda + 77;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.quantidade,
args.ajusteX + tituloQuantidadeMoeda,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
var tituloValorMoeda = tituloQuantidadeMoeda + 92;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.valor,
args.ajusteX + tituloValorMoeda,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.igualDoValorDoDocumento + titulos.valorDoDocumento,
args.ajusteX + colunaLateral,
args.ajusteY + tituloDaSextaLinha,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
boleto.getValorFormatadoBRL(),
args.ajusteX + colunaLateral,
args.ajusteY + sextaLinha,
{
lineBreak: false,
width: tamanhoDasCelulasADireita,
align: "right",
}
);
var setimaLinhaLateral = sextaLinha + ESPACO_ENTRE_LINHAS,
tituloDaSetimaLinha = tituloDaSextaLinha + ESPACO_ENTRE_LINHAS,
tituloDaSetimaLinhaLateral =
setimaLinhaLateral - diferencaEntreTituloEValor;
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
titulos.instrucoes,
args.ajusteX + margemDoSegundoBloco,
args.ajusteY + tituloDaSetimaLinha,
{
lineBreak: false,
width: 294,
align: "left",
}
);
var instrucaoY = tituloDaSetimaLinha + 12;
boleto.getInstrucoes().forEach(function (instrucao, indice) {
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
instrucao,
args.ajusteX + margemDoSegundoBloco,
args.ajusteY + instrucaoY + indice * args.tamanhoDaFonte,
{
lineBreak: false,
width: 400,
align: "left",
}
);
});
if (args.exibirCampoUnidadeBeneficiaria) {
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Unidade Beneficiária",
args.ajusteX + 30,
args.ajusteY + tituloDaSetimaLinha + 70,
{
lineBreak: false,
width: 294,
align: "left",
}
);
}
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Pagador" + " " + pagador.getIdUsuario()
? pagador.getIdUsuario()
: "",
args.ajusteX + 30,
args.ajusteY + tituloDaSetimaLinha + 115,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
pagador.getIdentificacao(),
args.ajusteX + 30,
args.ajusteY + tituloDaSetimaLinha + 115 + 10,
{
lineBreak: false,
width: 535,
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 + 30,
args.ajusteY + tituloDaSetimaLinha + 115 + 10 + espacamento,
{
lineBreak: false,
width: 535,
align: "left",
}
);
espacamento += espacamento;
}
if (enderecoDoPagador.getSegundaLinha()) {
pdf
.font("normal")
.fontSize(args.tamanhoDaFonte)
.text(
enderecoDoPagador.getSegundaLinha(),
args.ajusteX + 30,
args.ajusteY + tituloDaSetimaLinha + 115 + 10 + espacamento,
{
lineBreak: false,
width: 535,
align: "left",
}
);
}
}
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Código de Baixa",
args.ajusteX + 370,
args.ajusteY + tituloDaSetimaLinha + 159,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo)
.text(
"Autenticação Mecânica",
args.ajusteX + 360,
args.ajusteY + tituloDaSetimaLinha + 171.5,
{
lineBreak: false,
width: 294,
align: "left",
}
);
pdf
.font("negrito")
.fontSize(args.tamanhoDaFonteDoTitulo + 1)
.text(
"FICHA DE COMPENSAÇÃO",
args.ajusteX + 421,
args.ajusteY + tituloDaSetimaLinha + 171.5,
{
lineBreak: false,
width: 150,
align: "right",
}