Как преобразовать PDF-файл или BLOB-объект в base64? - PullRequest
1 голос
/ 17 марта 2020

Мой API в NodeJS отвечает с помощью файла PDF, но мой пользовательский интерфейс, использующий реагирование, не может получить этот файл и сделать его «загружаемым», поэтому я пытаюсь преобразовать его в базу 64. Вопрос в том, как?

Я пытаюсь использовать этот npm пакет следующим образом:

  const bytes = await utf8.encode(bill)
  const encoded = await base64.encode(bytes)
  console.log(typeof encoded)
  console.log(typeof bytes)

И в этом проекте я использую этот модуль тоже , и он использовать PDFkit для создания заготовки, и я использую Adonis в этом проекте

    const duplicata = await Duplicata.findBy('id', params.id)
const banco = await duplicata.banco().fetch()
const empresa = await duplicata.empresa().fetch()
const cliente = await Cliente.findBy('cnpj', auth.user.cnpj)
const clienteEnderecos = await cliente.clienteEnderecos().fetch()
const endereco = await clienteEnderecos.toJSON().find(endereco => {
  if (endereco.tipo_endereco === 'COBRANCA') {
    return endereco
  }
  if (endereco.tipo_endereco === 'PRINCIPAL') {
    return endereco
  }
  if (endereco.tipo_endereco === 'ENTREGA') {
    return endereco
  }
})

empresa.bairro = empresa.bairro.trim()
cliente.nome_razao = cliente.nome_razao.trim()
cliente.sobrenome_fantasia = cliente.sobrenome_fantasia.trim()

const boleto = {
  banco: Utils.getBankModel(banco.cod_banco),
  pagador: {
    Nome: cliente.nome_razao + ' ' + cliente.sobrenome_fantasia,
    RegistroNacional: cliente.cnpj,
    Logradouro: endereco.endereco,
    Bairro: endereco.bairro,
    Uf: endereco.uf,
    Cep: endereco.cep
  },
  beneficiario: {
    dadosBancarios: {
      carteira: banco.carteira,
      agencia: banco.agencia,
      agenciaDigito: banco.digito,
      conta: banco.conta,
      contaDigito: banco.digito_conta,
      nossoNumero: duplicata.nro_documento.slice(0, -1),
      nossoNumeroDigito: duplicata.nro_documento && duplicata.nro_documento.charAt(duplicata.nro_documento.length - 1)
    },
    dadosEndereco: {
      descricao: empresa.descricao,
      endereco: empresa.endereco,
      bairro: empresa.bairro,
      cidade: empresa.cidade,
      uf: empresa.uf,
      cep: empresa.cep,
      numero: empresa.numero,
      cnpj_empresa: empresa.cnpj_empresa
    }
  },
  boleto: {
    numeroDocumento: duplicata.nro_duplicata + ' ' + duplicata.serie_duplicata,
    especieDocumento: 'DM',
    valor: parseFloat(duplicata.valor_duplicata),
    datas: {
      vencimento: moment(duplicata.vencimento_duplicata, 'mm-dd-yyyy'),
      processamento: moment(duplicata.emissao_duplicata, 'mm-dd-yyyy'),
      documentos: moment(duplicata.emissao_duplicata, 'mm-dd-yyyy')
    }
  },
  instrucao: {
    Juros: parseFloat(duplicata.juros_mora)
  }

}

const novoBoleto = Utils.gerarBoleto(boleto)
    try {
  if (!fs.existsSync((Helpers.tmpPath('boletos')))) fs.mkdirSync('./tmp/boletos')
  const stream = fs.createWriteStream(Helpers.tmpPath('boletos/boleto.pdf'))

  const boleto = await new Gerador.boleto.Gerador(novoBoleto).gerarPDF({
    creditos: '',
    stream: stream
  })
  boleto.end()

  const bytes = await utf8.encode(boleto)
  const encoded = await base64.encode(bytes)
  console.log(encoded)
  console.log(bytes)

  response.type('pdf')
  response.implicitEnd = false

  boleto.pipe(response.response)

большинство переменных в этом пакете на португальском

, но моя консоль я не могу получить никакого ответа, просто пустая строка , только в закодированной переменной, но только я не кодирую с помощью кодера utf8, но ответ не соответствует ожиданиям (ответ base64).

Я не знаю, как показать свой код таким образом, я могу открыть любые предложения или какую информацию мне нужно показать, чтобы лучше найти решение, tks: D

...