node-nfe-nfce
Version:
Modulo que auxilia na geração de NFe e NFCe
653 lines • 33.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.gerarArquivoPDF = void 0;
const bwip_js_1 = __importDefault(require("bwip-js"));
const date_fns_1 = require("date-fns");
const path_1 = __importDefault(require("path"));
const pdfkit_1 = __importDefault(require("pdfkit"));
const diretorioDeFontes = path_1.default.join(__dirname, './fontes');
const timesNewRoman = path_1.default.join(diretorioDeFontes, 'Times New Roman.ttf');
const timesNewRomanNegrito = path_1.default.join(diretorioDeFontes, 'Times New Roman Bold.ttf');
const timesNewRomanItalico = path_1.default.join(diretorioDeFontes, 'Times New Roman Italic.ttf');
const timesNewRomanNegritoItalico = path_1.default.join(diretorioDeFontes, 'Times New Roman Bold Italic.ttf');
const args = {
ajusteY: 0,
ajusteX: 0,
autor: '',
titulo: '',
criador: '',
tamanhoDaFonteDoTitulo: 6,
corDoTitulo: 'black',
alinhamentoDoTitulo: 'left',
alinhamentoDoTituloDaTabela: 'center',
tamanhoDaFonteDaSecao: 7,
corDaSecao: 'black',
tamanhoDaFonteDoCampo: 9.5,
alinhamentoDoCampo: 'center',
corDoCampo: 'black',
tamanhoDaFonteDosItens: 7,
separadorDeItens: true,
ajusteYDoLogotipo: 0,
ajusteYDaIdentificacaoDoEmitente: 0,
ambiente: 'producao',
opacidadeDaHomologacao: 0.2,
ajusteYDaHomologacao: 275,
tamanhoDoCodigoDeBarras: 32,
corDoLayout: 'black',
larguraDaPagina: 595.44,
alturaDaPagina: 841.68,
creditos: 'Impresso com Brasil.js - http://github.com/brasil-js/danfe'
};
function gerarArquivoPDF(danfe, callback) {
const emitente = danfe.emitente;
const destinatario = danfe.destinatario;
const transportador = danfe.transportador;
const impostos = danfe.impostos;
const volumes = danfe.volumes;
const protocolo = danfe.protocolo;
const itens = danfe.itens;
const fatura = danfe.fatura;
let alturaDoBlocoFaturaDuplicatas = 0;
let duplicatas = danfe.duplicatas;
const pdf = new pdfkit_1.default({
bufferPages: true,
margin: 0,
size: [
args.larguraDaPagina,
args.alturaDaPagina
],
info: {
Author: args.autor,
Title: args.titulo,
Creator: args.criador,
Producer: 'http://github.com/brasil-js/danfe'
}
});
const pdfTemporario = new pdfkit_1.default({
margin: 0,
size: [
args.larguraDaPagina,
args.alturaDaPagina
]
});
const deveExibirQuadroDeCalculoDoIssqn = danfe.valorTotalDosServicos !== undefined ||
impostos.baseDeCalculoDoIssqn !== undefined ||
impostos.valorTotalDoIssqn;
pdf.registerFont('normal', timesNewRoman);
pdf.registerFont('negrito', timesNewRomanNegrito);
pdf.registerFont('italico', timesNewRomanItalico);
pdf.registerFont('negrito-italico', timesNewRomanNegritoItalico);
pdf.registerFont('codigoDeBarras', timesNewRoman);
pdfTemporario.registerFont('normal', timesNewRoman);
const grossuraDaLinha = 0.5;
const margemTopo = 2.8;
const margemEsquerda = 3;
const margemDireita = 589.65;
const larguraDoFormulario = margemDireita - margemEsquerda;
pdf.lineWidth(grossuraDaLinha);
function linhaHorizontal(x1, x2, y) {
y = margemTopo + Number(args.ajusteY) + y;
x1 = margemEsquerda + Number(args.ajusteX) + x1;
x2 = margemDireita + Number(args.ajusteX) + x2;
return pdf.moveTo(x1, y).lineTo(x2, y).stroke();
}
function linhaHorizontalTracejada(x1, x2, y) {
y = margemTopo + Number(args.ajusteY) + y;
x1 = margemEsquerda + Number(args.ajusteX) + x1;
x2 = margemDireita + Number(args.ajusteX) + x2;
return pdf.moveTo(x1, y).lineTo(x2, y).dash(3, { space: 5 }).stroke();
}
function linhaVertical(y1, y2, x) {
x = margemEsquerda + Number(args.ajusteX) + x;
y1 = margemTopo + Number(args.ajusteY) + y1;
y2 = margemTopo + Number(args.ajusteY) + y2;
return pdf.moveTo(x, y1).lineTo(x, y2).stroke();
}
function secao(value, x, y, largura, tamanho) {
x = margemEsquerda + Number(args.ajusteX) + x;
y = margemTopo + Number(args.ajusteY) + y;
pdf.font('negrito')
.fillColor(args.corDaSecao)
.fontSize(tamanho ?? args.tamanhoDaFonteDaSecao)
.text((value ?? '').toUpperCase(), x, y, {
width: largura,
align: 'left'
});
}
function titulo(value, x, y, largura, alinhamento, tamanho) {
x = margemEsquerda + Number(args.ajusteX) + x;
y = margemTopo + Number(args.ajusteY) + y;
pdf.font('normal')
.fillColor(args.corDoTitulo)
.fontSize(tamanho ?? args.tamanhoDaFonteDoTitulo)
.text((value ?? '').toUpperCase(), x, y, {
width: largura,
align: alinhamento ?? args.alinhamentoDoTitulo
});
}
function normal(pdf, value, x, y, largura, alinhamento, tamanho) {
pdf.font('normal')
.fillColor(args.corDoTitulo)
.fontSize(tamanho ?? 8)
.text(value ?? '', margemEsquerda + Number(args.ajusteX) + x, margemTopo + Number(args.ajusteY) + y, {
width: largura,
align: alinhamento ?? 'center',
lineGap: -1.5
});
}
function italico(value, x, y, largura, alinhamento, tamanho) {
pdf.font('italico')
.fillColor(args.corDoTitulo)
.fontSize(tamanho ?? 6)
.text(value ?? '', margemEsquerda + Number(args.ajusteX) + x, margemTopo + Number(args.ajusteY) + y, {
width: largura,
align: alinhamento ?? 'center',
lineGap: -1.5
});
}
function negrito(value, x, y, largura, alinhamento, tamanho) {
pdf.font('negrito')
.fillColor(args.corDoTitulo)
.fontSize(tamanho ?? 6)
.text(value ?? '', margemEsquerda + Number(args.ajusteX) + x, margemTopo + Number(args.ajusteY) + y, {
width: largura,
align: alinhamento ?? 'center',
lineGap: -1.5
});
}
function campo(value, x, y, largura, alinhamento, tamanho) {
pdf.font('negrito')
.fillColor(args.corDoCampo)
.fontSize(tamanho ?? args.tamanhoDaFonteDoCampo)
.text(value ?? '', margemEsquerda + Number(args.ajusteX) + x, margemTopo + Number(args.ajusteY) + y, {
width: largura,
align: alinhamento ?? args.alinhamentoDoCampo
});
}
async function desenharPagina() {
if (args.ambiente !== 'producao') {
pdf.font('normal')
.fillColor(args.corDoTitulo)
.fontSize(50)
.fillOpacity(args.opacidadeDaHomologacao)
.text('HOMOLOGAÇÃO', margemEsquerda + Number(args.ajusteX) + 0, margemTopo + Number(args.ajusteY) + 400 + Number(args.ajusteYDaHomologacao), {
width: larguraDoFormulario,
align: 'center'
});
pdf.font('normal')
.fillColor(args.corDoTitulo)
.fontSize(25)
.fillOpacity(args.opacidadeDaHomologacao)
.text('SEM VALOR FISCAL', margemEsquerda + Number(args.ajusteX) + 0, margemTopo + Number(args.ajusteY) + 450 + Number(args.ajusteYDaHomologacao), {
width: larguraDoFormulario,
align: 'center'
});
}
linhaHorizontal(0, 0, 0);
linhaHorizontal(0, -110.5, 28.3);
linhaHorizontal(0, 0, 51.1);
linhaVertical(0, 51.1, 0);
linhaVertical(28.3, 51.1, 99.2);
linhaVertical(0, 51.1, 476);
linhaVertical(0, 51.1, 0);
linhaVertical(0, 51.1, larguraDoFormulario);
linhaHorizontal(317.4, -255, 96.4);
linhaVertical(96.4, 116.2, 317.4);
linhaHorizontal(317.4, -255, 116.2);
linhaVertical(96.4, 116.2, 331.55);
linhaHorizontal(0, 0, 59.55);
linhaHorizontal(340.05, 0, 104.8);
linhaHorizontal(340.05, 0, 127.4);
linhaHorizontal(0, 0, 150.2);
linhaHorizontal(0, 0, 170);
linhaHorizontal(0, 0, 190);
linhaVertical(59.55, 190, 0);
linhaVertical(59.55, 150.2, 240.75);
linhaVertical(59.55, 170, 340.05);
linhaVertical(59.55, 190, larguraDoFormulario);
linhaVertical(170, 190, 195.55);
linhaVertical(170, 190, 391);
linhaHorizontal(0, 0, 201.2);
linhaHorizontal(0, 0, 221);
linhaHorizontal(0, 0, 241);
linhaHorizontal(0, 0, 261);
linhaVertical(201.2, 261, 0);
linhaVertical(201.2, 221, 357.1);
linhaVertical(221, 261, 274.9);
linhaVertical(241, 261, 297.6);
linhaVertical(221, 261, 396.75);
linhaVertical(201.2, 261, 493.1);
linhaVertical(201.2, 261, larguraDoFormulario);
linhaHorizontal(0, 0, 269);
linhaHorizontal(0, 0, 289);
linhaHorizontal(0, 0, 309);
linhaVertical(269, 309, 0);
linhaVertical(269, 309, 87.7);
linhaVertical(269, 309, (87.7 * 2) + 0.3);
linhaVertical(269, 309, (87.7 * 3) + 0.4);
linhaVertical(269, 309, (87.7 * 4) + 0.4);
linhaVertical(269, 309, (87.7 * 5) + 0.6);
linhaVertical(269, 309, (87.7 * 5) + 51.8);
linhaVertical(269, 309, larguraDoFormulario);
linhaHorizontal(0, 0, 320);
linhaHorizontal(0, 0, 340);
linhaHorizontal(0, 0, 360);
linhaHorizontal(0, 0, 380);
linhaVertical(320, 380, 0);
linhaVertical(320, 340, 170);
linhaVertical(320, 340, 346);
linhaVertical(320, 360, 434);
linhaVertical(320, 360, 456.65);
linhaVertical(320, 380, 258);
linhaVertical(360, 380, 59.6);
linhaVertical(360, 380, 158.6);
linhaVertical(360, 380, 357);
linhaVertical(360, 380, 473.3);
linhaVertical(320, 380, larguraDoFormulario);
let alturaInicialDoQuadroDeItens = 381;
let alturaInicialDoQuadroDeDuplicatas = alturaInicialDoQuadroDeItens;
const alturaDeLinhaDeDuplicata = 23;
const duplicatasPorLinha = 8;
const larguraDaDuplicata = larguraDoFormulario / duplicatasPorLinha;
let segundaLinhaDoQuadroDeItens;
let linhasDeDuplicatas = 0;
if (fatura !== undefined) {
alturaDoBlocoFaturaDuplicatas += Number(args.tamanhoDaFonteDoTitulo);
alturaInicialDoQuadroDeDuplicatas += 6.5;
}
if (duplicatas !== undefined && duplicatas.length > 0) {
linhasDeDuplicatas = Math.ceil(duplicatas.length / duplicatasPorLinha);
alturaDoBlocoFaturaDuplicatas += (linhasDeDuplicatas * alturaDeLinhaDeDuplicata) + 10;
}
else {
alturaDoBlocoFaturaDuplicatas += Number(args.tamanhoDaFonteDoTitulo) + 3;
}
duplicatas = [];
const margemDeCimaDaDuplicata = 2;
const margemEsquerdaDaDuplicata = 2;
const larguraDaDuplicataComMargem = larguraDaDuplicata - margemEsquerdaDaDuplicata - 1;
let x1, x2, y;
duplicatas.forEach(function (linha, indiceDaLinha) {
linha.forEach(function (duplicata, indiceDaDuplicata) {
x1 = indiceDaDuplicata * larguraDaDuplicata;
x2 = x1 + larguraDaDuplicata - larguraDoFormulario;
y = alturaInicialDoQuadroDeDuplicatas + (indiceDaLinha * alturaDeLinhaDeDuplicata);
linhaHorizontal(x1, x2, y);
linhaVertical(y, y + alturaDeLinhaDeDuplicata, x1);
titulo('NÚM.', x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata, larguraDaDuplicataComMargem);
titulo(duplicata.numero, x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata, larguraDaDuplicataComMargem, 'right');
titulo('VENC.', x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + Number(args.tamanhoDaFonteDoTitulo), larguraDaDuplicataComMargem, 'left');
titulo(duplicata.vencimento, x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + Number(args.tamanhoDaFonteDoTitulo), larguraDaDuplicataComMargem, 'right');
titulo('VALOR', x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + (2 * args.tamanhoDaFonteDoTitulo), larguraDaDuplicataComMargem, 'left');
titulo(duplicata.valor, x1 + margemEsquerdaDaDuplicata, y + margemDeCimaDaDuplicata + (2 * args.tamanhoDaFonteDoTitulo), larguraDaDuplicataComMargem, 'right');
});
linhaVertical(y, y + alturaDeLinhaDeDuplicata, x1 + larguraDaDuplicata);
linhaHorizontal(0, x2, y + alturaDeLinhaDeDuplicata);
});
alturaInicialDoQuadroDeItens += alturaDoBlocoFaturaDuplicatas;
segundaLinhaDoQuadroDeItens = alturaInicialDoQuadroDeItens + 14.2;
linhaHorizontal(0, 0, alturaInicialDoQuadroDeItens);
linhaHorizontal(0, 0, segundaLinhaDoQuadroDeItens);
linhaHorizontal(0, 0, 751);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 0);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 53.8);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 235.3);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 269.3);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 292);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 314.5);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 331.6);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 371.2);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 405.4);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 439.3);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 473.2);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 507.2);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 535.6);
linhaVertical(alturaInicialDoQuadroDeItens, 751, 555.4);
linhaVertical(alturaInicialDoQuadroDeItens, 751, larguraDoFormulario);
let alturaInicialDoSetimoBloco = 793.6;
if (deveExibirQuadroDeCalculoDoIssqn) {
linhaHorizontal(0, 0, 762.2);
linhaHorizontal(0, 0, 782.2);
linhaVertical(762.2, 782.2, 0);
linhaVertical(762.2, 782.2, 136.1);
linhaVertical(762.2, 782.2, (136.1 * 2) - 0.1);
linhaVertical(762.2, 782.2, (136.1 * 3) - 0.1);
linhaVertical(762.2, 782.2, larguraDoFormulario);
}
else {
alturaInicialDoSetimoBloco = 762.2;
}
linhaHorizontal(0, 0, alturaInicialDoSetimoBloco);
linhaHorizontal(0, 0, 821.8);
linhaVertical(alturaInicialDoSetimoBloco, 821.8, 0);
linhaVertical(alturaInicialDoSetimoBloco, 821.8, 388.25);
linhaVertical(alturaInicialDoSetimoBloco, 821.8, larguraDoFormulario);
linhaHorizontalTracejada(0, 0, 55.32);
normal(pdf, [
'Recebemos de',
emitente.nome,
'os produtos e/ou serviços constantes da nota',
'fiscal eletrônica indicada abaixo.',
'Emissão:',
danfe.dataDaEmissaoFormatada,
'- Valor Total:',
danfe.dataDaEmissao,
'- Destinatário:',
destinatario.nome,
'- Endereço:',
destinatario.endereco.logradouro
].join(' ').toUpperCase(), 1.5, 3, 472.5, 'justify', 6.9);
titulo('DANFE', 266.5, 63.5, 197, 'left', 14);
normal(pdf, 'NF-e', 476.6, 1.8, 110, 'center', 14);
normal(pdf, danfe.numero, 476.6, 22, 110, 'center', 10);
normal(pdf, danfe.serie, 476.6, 31.5, 110, 'center', 10);
italico('IDENTIFICAÇÃO DO EMITENTE', 1, 60, 238);
const temLogotipo = emitente.logotipo;
const identificacaoDoEmitenteY = temLogotipo !== undefined ? 78 : 84;
const identificacaoDoEmitenteX = temLogotipo !== undefined ? 67 : 1.5;
const identificacaoDoEmitenteLargura = temLogotipo !== undefined ? 172 : 237;
const identificacaoDoEmitenteFonte = temLogotipo !== undefined ? 0 : 1.5;
if (temLogotipo !== undefined) {
const caminhoDoLogotipo = emitente.logotipo;
pdf.image(caminhoDoLogotipo, margemEsquerda + Number(args.ajusteX) + 4.5, margemTopo + Number(args.ajusteY) + Number(args.ajusteYDoLogotipo) + 78, {
fit: [60, 60]
});
}
negrito(emitente.nome, identificacaoDoEmitenteX, identificacaoDoEmitenteY + Number(args.ajusteYDaIdentificacaoDoEmitente), identificacaoDoEmitenteLargura, 'center', 8 + identificacaoDoEmitenteFonte);
if (emitente.endereco.logradouro !== undefined) {
normal(pdf, emitente.endereco.logradouro, identificacaoDoEmitenteX, pdf.y - margemTopo + 2, identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte);
}
if (emitente.endereco.cidade !== undefined) {
normal(pdf, emitente.endereco.cidade, identificacaoDoEmitenteX, pdf.y - margemTopo, identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte);
}
let jaAdicionouEspacamento = false;
if (emitente.telefone !== undefined) {
jaAdicionouEspacamento = true;
normal(pdf, 'Telefone: ' + String(emitente.telefone), identificacaoDoEmitenteX, pdf.y - margemTopo + 2, identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte);
}
if (emitente.email !== undefined) {
normal(pdf, 'Email: ' + String(emitente.email), identificacaoDoEmitenteX, pdf.y - margemTopo + (jaAdicionouEspacamento ? 0 : 2), identificacaoDoEmitenteLargura, 'center', 6 + identificacaoDoEmitenteFonte);
}
normal(pdf, 'Documento Auxiliar da Nota Fiscal Eletrônica', 241.5, 77, 99.5);
normal(pdf, '0 - ENTRADA', 248, 100, 99.5, 'left');
normal(pdf, '1 - SAÍDA', 248, 108.5, 99.5, 'left');
negrito(danfe.tipo, 317.5, 96.8, 14.5, 'center', 18);
const formularioDeSeguranca = danfe.formularioDeSeguranca;
if (protocolo !== undefined) {
normal(pdf, 'Consulta de autenticidade no portal nacional da NF-e', 340.5, 130, 244);
normal(pdf, 'www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizadora', 340.5, 138, 244);
}
else if (formularioDeSeguranca !== undefined) {
const optionsCep = {
bcid: 'code128',
text: formularioDeSeguranca.dadosDaNfe(),
height: 341.5,
width: 131.5
};
const barcodeCep = await bwip_js_1.default.toBuffer(optionsCep);
pdf.image(barcodeCep, 341.5, 131.5);
}
const informacoesComplementares = [
danfe.InformacoesComplementares
];
if (formularioDeSeguranca !== undefined) {
informacoesComplementares.unshift([
'DANFE EM CONTINGÊNCIA, ',
'IMPRESSO EM DECORRÊNCIA DE PROBLEMAS TÉCNICOS: ',
formularioDeSeguranca.justificativa.toUpperCase()
].join(''));
}
normal(pdf, informacoesComplementares.join(' - '), 1, alturaInicialDoSetimoBloco + 7.5, 386, 'justify', 6);
normal(pdf, danfe.numero, 241.2, 119.5, 98.5, 'center', 10);
normal(pdf, danfe.serie, 241.2, 129.5, 98.5, 'center', 10);
titulo('DATA DE RECEBIMENTO', 1.5, 29, 97);
titulo('IDENTIFICAÇÃO E ASSINATURA DO RECEBEDOR', 100.5, 29, 374);
titulo('CHAVE DE ACESSO', 341.5, 105.5, 244);
campo(danfe.chaveDeAcesso, 341.5, 114, 244);
if (protocolo !== undefined) {
titulo('PROTOCOLO DE AUTORIZAÇÃO DE USO', 341.5, 151, 244);
campo(`${String(protocolo.codigo)} - ${(0, date_fns_1.format)(protocolo.data, 'dd/MM/yyyy HH:mm:ss')}`, 341.5, 158.4, 244);
}
else if (formularioDeSeguranca !== undefined) {
titulo('DADOS DA NFE', 341.5, 151, 244);
campo(formularioDeSeguranca.dadosDaNfe, 341.5, 158.4, 244);
}
titulo('NATUREZA DA OPERAÇÃO', 1.5, 151, 338);
campo(danfe.naturezaDaOperacao, 1.5, 158.4, 338);
titulo('INSCRIÇÃO ESTADUAL', 1.5, 171, 192.5);
campo(emitente.inscricaoEstadual, 1.5, 178.4, 192.5);
titulo('INSCRIÇÃO ESTADUAL DO SUBST. TRIBUT.', 197, 171, 192.5);
campo(danfe.inscricaoEstadualDoSubstitutoTributario, 197, 178.4, 192.5);
titulo('CNPJ', 392.5, 171, 192.5);
campo(emitente.registroNacional, 392.5, 178.4, 192.5);
secao('DESTINATÁRIO / REMETENTE', 1.5, 194, 0, undefined);
titulo('NOME / RAZÃO SOCIAL', 1.5, 202, 353.5);
campo(destinatario.nome, 1.5, 210, 353.5, 'left');
titulo('CNPJ / CPF', 358, 202, 133.5);
campo(destinatario.registroNacional, 358, 210, 133.5);
titulo('DATA DA EMISSÃO', 495, 202, 90);
campo(danfe.dataDaEmissaoFormatada, 495, 210, 90);
titulo('ENDEREÇO', 1.5, 222, 272);
campo(destinatario.endereco.logradouro, 1.5, 230, 272, 'left', args.tamanhoDaFonteDoCampo - 0.5);
titulo('BAIRRO / DISTRITO', 276, 222, 119);
campo(destinatario.endereco.bairro, 276, 230, 119);
titulo('CEP', 398, 222, 93);
campo(destinatario.endereco.cep, 398, 230, 93);
titulo('DATA DA SAÍDA', 495, 222, 90);
campo((0, date_fns_1.format)(danfe.dataDaEntradaOuSaida, 'dd/MM/yyyy HH:mm:ss'), 495, 230, 90);
titulo('MUNICÍPIO', 1.5, 242, 272);
campo(destinatario.endereco.municipio, 1.5, 250, 272, 'left');
titulo('UF', 276, 242, 20);
campo(destinatario.endereco.uf, 276, 250, 20);
titulo('FONE / FAX', 299, 242, 96);
campo(destinatario.telefone, 299, 250, 96);
titulo('INSCRIÇÃO ESTADUAL', 398, 242, 93);
campo(destinatario.inscricaoEstadual, 398, 250, 93);
titulo('HORA DA SAÍDA', 495, 242, 90);
campo(danfe.horarioDaEntradaOuSaida, 495, 250, 90);
secao('CÁLCULO DO IMPOSTO', 1.5, 261.5, 0, undefined);
titulo('BASE DE CÁLCULO DO ICMS', 1.5, 270, 84);
campo(impostos.baseDeCalculoDoIcms, 1.5, 278, 84, 'right');
titulo('VALOR DO ICMS', 89, 270, 84);
campo(impostos.valorDoIcms, 89, 278, 84, 'right');
titulo('BASE DE CÁLC. ICMS S.T.', 177, 270, 84);
campo(impostos.baseDeCalculoDoIcmsSt, 177, 278, 84, 'right');
titulo('VALOR DO ICMS SUBST.', 265, 270, 84);
campo(impostos.valorDoIcmsSt, 265, 278, 84, 'right');
titulo('VALOR IMP. IMPORTAÇÃO', 353, 270, 84);
campo(impostos.valorDoImpostoDeImportacao, 353, 278, 84, 'right');
titulo('VALOR DO PIS', 441, 270, 47);
campo(impostos.valorDoPis, 441, 278, 47, 'right');
titulo('VALOR TOTAL DOS PRODUTOS', 492, 270, 93);
campo(danfe.valorTotalDosProdutos, 492, 278, 93, 'right');
titulo('VALOR DO FRETE', 1.5, 290, 84);
campo(danfe.valorDoFrete, 1.5, 298, 84, 'right');
titulo('VALOR DO SEGURO', 89, 290, 84);
campo(danfe.valorDoSeguro, 89, 298, 84, 'right');
titulo('DESCONTO', 177, 290, 84);
campo(danfe.desconto, 177, 298, 84, 'right');
titulo('OUTRAS DESPESAS', 265, 290, 84);
campo(danfe.uutrasDespesas, 265, 298, 84, 'right');
titulo('VALOR TOTAL DO IPI', 353, 290, 84);
campo(impostos.valorTotalDoIpi, 353, 298, 84, 'right');
titulo('VALOR DA COFINS', 440.5, 290.5, 47, undefined, Number(args.tamanhoDaFonteDoTitulo) - 1);
campo(impostos.valorDaCofins, 440.5, 298, 47, 'right');
titulo('VALOR TOTAL DA NOTA', 492, 290, 93);
campo(danfe.valorTotalDaNota, 492, 298, 93, 'right');
secao('TRANSPORTADOR / VOLUMES TRANSPORTADOS', 1.5, 312.5, 0, undefined);
titulo('NOME / RAZÃO SOCIAL', 1.5, 321, 166.5);
campo(transportador.nome, 1.5, 329, 166.5, 'left');
titulo('FRETE POR CONTA', 171.5, 321, 85);
campo(danfe.modalidadeDoFrete, 171.5, 329, 85);
titulo('CÓDIGO ANTT', 259.5, 321, 84);
campo(transportador.codigoAntt, 259.5, 329, 84);
titulo('PLACA DO VEÍCULO', 347.5, 321, 84);
campo(transportador.placaDoVeiculo, 347.5, 329, 84);
titulo('UF', 435.5, 321, 19.5);
campo(transportador.ufDaPlacaDoVeiculo, 435.5, 329, 19.5);
titulo('CNPJ / CPF', 458, 321, 126.5);
campo(transportador.registroNacional, 458, 329, 126.5);
titulo('ENDEREÇO', 1.5, 341, 254);
campo(transportador.endereco.logradouro, 1.5, 349, 254, 'left', Number(args.tamanhoDaFonteDoCampo) - 0.5);
titulo('MUNICÍPIO', 259.5, 341, 172);
campo(transportador.endereco.municipio, 259.5, 349, 172);
titulo('UF', 435.5, 341, 19.5);
campo(transportador.endereco.uf, 435.5, 349, 19.5);
titulo('INSCRIÇÃO ESTADUAL', 458, 341, 126.5);
campo(transportador.inscricaoEstadual, 458, 349, 126.5);
titulo('QUANTIDADE', 1.5, 361, 56.5);
campo(volumes.quantidade, 1.5, 369, 56.5);
titulo('ESPÉCIE', 60.8, 361, 96);
campo(volumes.especie, 60.8, 369, 96);
titulo('MARCA', 160, 361, 96);
campo(volumes.marca, 160, 369, 96);
titulo('NUMERAÇÃO', 259.5, 361, 96);
campo(volumes.numeracao, 259.5, 369, 96);
titulo('PESO BRUTO', 358.5, 361, 112.5);
campo(volumes.pesoBruto, 358.5, 369, 112.5);
titulo('PESO LÍQUIDO', 474.5, 361, 110.5);
campo(volumes.pesoLiquido, 474.5, 369, 110.5);
let alturaDaSecaoDosItens = 383;
let alturaDosTitulosDosItens;
if (fatura !== undefined || duplicatas.length > 0) {
secao('FATURA / DUPLICATAS', 1.5, 383, 0, undefined);
alturaDaSecaoDosItens += alturaDoBlocoFaturaDuplicatas;
}
if (fatura !== undefined) {
const dadosDaFatura = [];
if (fatura.getNumero() !== undefined) {
dadosDaFatura.push('NÚMERO: ' + String(fatura.numero));
dadosDaFatura.push('VALOR ORIGINAL: ' + String(fatura.valorOriginal));
dadosDaFatura.push('VALOR DO DESCONTO: ' + String(fatura.valorDoDesconto));
dadosDaFatura.push('VALOR LÍQUIDO: ' + String(fatura.valorLiquido));
}
if (fatura.getFormaDePagamento() !== undefined) {
dadosDaFatura.push('PAGAMENTO: ' + String(fatura.formaDePagamento));
}
const linhaDadosDaFatura = dadosDaFatura.join(' - ');
if (linhaDadosDaFatura !== undefined) {
negrito(linhaDadosDaFatura, 1.5, 390, larguraDoFormulario, 'left');
}
}
alturaDosTitulosDosItens = alturaDaSecaoDosItens + 12;
secao('DADOS DOS PRODUTOS / SERVIÇOS', 1.5, alturaDaSecaoDosItens, 0, undefined);
titulo('CÓDIGO', 1.5, alturaDosTitulosDosItens, 50.5, args.alinhamentoDoTituloDaTabela);
titulo('DESCRIÇÃO DO PRODUTO / SERVIÇO', 55, alturaDosTitulosDosItens, 179, args.alinhamentoDoTituloDaTabela);
titulo('NCM/SH', 236.5, alturaDosTitulosDosItens, 31.5, args.alinhamentoDoTituloDaTabela);
titulo('O/CST', 270.5, alturaDosTitulosDosItens, 20, args.alinhamentoDoTituloDaTabela);
titulo('CFOP', 293.5, alturaDosTitulosDosItens, 19.5, args.alinhamentoDoTituloDaTabela);
titulo('UN.', 316, alturaDosTitulosDosItens, 14.5, args.alinhamentoDoTituloDaTabela);
titulo('QUANT.', 333, alturaDosTitulosDosItens, 37, args.alinhamentoDoTituloDaTabela);
titulo('VALOR UNIT.', 373, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela);
titulo('VALOR TOTAL', 407.5, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela);
titulo('B. CÁLC. ICMS', 441.5, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela);
titulo('VALOR ICMS', 475, alturaDosTitulosDosItens - 4, 31.5, args.alinhamentoDoTituloDaTabela);
titulo('VALOR IPI', 508, alturaDosTitulosDosItens - 4, 28, args.alinhamentoDoTituloDaTabela);
titulo('ALÍQ. ICMS', 532, alturaDosTitulosDosItens - 4, 28, args.alinhamentoDoTituloDaTabela);
titulo('ALÍQ. IPI', 557, alturaDosTitulosDosItens, 28, args.alinhamentoDoTituloDaTabela);
if (deveExibirQuadroDeCalculoDoIssqn !== undefined) {
secao('CÁLCULO DO ISSQN', 1.5, 754.5, 0, undefined);
titulo('INSCRIÇÃO MUNICIPAL', 1.5, 763, 132.5);
campo(emitente.inscricaoMunicipal, 1.5, 771, 132.5, 'left');
titulo('VALOR TOTAL DOS SERVIÇOS', 137.5, 763, 132.5);
campo(danfe.valorTotalDosServicos, 137.5, 771, 132.5, 'right');
titulo('BASE DE CÁLCULO DO ISSQN', 273.5, 763, 132.5);
campo(impostos.baseDeCalculoDoIssqn, 273.5, 771, 132.5, 'right');
titulo('VALOR TOTAL DO ISSQN', 409.5, 763, 175.5);
campo(impostos.valorTotalDoIssqn, 409.5, 771, 175.5, 'right');
}
let alturaDaSecaoDoSetimoBloco = 786;
let alturaDosTitulosDoSetimoBloco;
if (!deveExibirQuadroDeCalculoDoIssqn) {
alturaDaSecaoDoSetimoBloco = 754;
}
alturaDosTitulosDoSetimoBloco = alturaDaSecaoDoSetimoBloco + 9;
secao('DADOS ADICIONAIS', 1.5, alturaDaSecaoDoSetimoBloco, 0, undefined);
titulo('INFORMAÇÕES COMPLEMENTARES', 1.5, alturaDosTitulosDoSetimoBloco, 385);
titulo('RESERVADO AO FISCO', 390, alturaDosTitulosDoSetimoBloco, 195);
if (args.creditos !== undefined) {
italico(args.creditos, 1.5, 827, larguraDoFormulario);
}
}
void desenharPagina();
let numeroDePaginas = 1;
const yInicialDosItens = 406 + alturaDoBlocoFaturaDuplicatas;
let yDoItemAtual = yInicialDosItens;
let alturaAtual = 0;
itens.forEach(async function (item) {
function renderizarLinha(pdf) {
if (item.codigo === '0' || item.codigo === '29' || item.codigo === '58') {
console.log(pdf.y);
}
normal(pdf, item.codigo, 1.5, yDoItemAtual, 51, 'center', args.tamanhoDaFonteDosItens);
let maiorY = pdf.y;
let descricao = item.descricao;
if (item.informacoesAdicionais !== undefined) {
descricao += '\n' + item.informacoesAdicionais;
}
normal(pdf, descricao, 55.5, yDoItemAtual, 178, 'justify', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.ncmSh, 235.5, yDoItemAtual, 32.5, 'center', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.oCst, 270, yDoItemAtual, 21, 'center', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.cfop, 293.5, yDoItemAtual, 21, 'center', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.unidade, 315, yDoItemAtual, 16.5, 'center', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.quantidade, 332.5, yDoItemAtual, 37.5, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.valorUnitario, 372, yDoItemAtual, 32.5, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.valorTotal, 407, yDoItemAtual, 31, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.baseDeCalculoDoIcms, 440, yDoItemAtual, 32.5, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.baseDeCalculoDoIcms, 440, yDoItemAtual, 32.5, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.valorDoIcms, 474.5, yDoItemAtual, 32, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.valorDoIpi, 508.5, yDoItemAtual, 26, 'right', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.aliquotaDoIcms, 536, yDoItemAtual + 0.65, 19, 'center', args.tamanhoDaFonteDosItens - 1);
maiorY = Math.max(maiorY, pdf.y);
normal(pdf, item.aliquotaDoIpi, 556.5, yDoItemAtual, 29, 'center', args.tamanhoDaFonteDosItens);
maiorY = Math.max(maiorY, pdf.y);
if (args.separadorDeItens !== undefined) {
linhaHorizontalTracejada(0, 0, maiorY);
}
return Number(maiorY) + (args.separadorDeItens !== undefined ? 2 : 0);
}
const altura = renderizarLinha(pdfTemporario) - yDoItemAtual;
if (alturaAtual + altura > (751 - yInicialDosItens)) {
numeroDePaginas += 1;
pdf.addPage({
margin: 0,
size: [
args.larguraDaPagina,
args.alturaDaPagina
]
});
pdf.y = 0;
yDoItemAtual = yInicialDosItens;
alturaAtual = 0;
void desenharPagina();
}
renderizarLinha(pdf);
alturaAtual += altura;
yDoItemAtual = yDoItemAtual + altura;
});
const paginas = pdf.bufferedPageRange();
for (let i = paginas.start; i < paginas.start + paginas.count; i++) {
pdf.switchToPage(i);
italico('FOLHA ' + (i + 1) + '/' + String(numeroDePaginas), 241.2, 141.2, 98.5, 'center', 8);
}
pdf.flushPages();
pdf.end();
callback(undefined, pdf);
}
exports.gerarArquivoPDF = gerarArquivoPDF;
//# sourceMappingURL=geradorDePdf.js.map