javascript - 如何在 base64 中转换 pdf 文件或 blob?
问题描述
我在 NodeJS 中的 API 正在使用 pdf 文件做出响应,但是我使用 react 的前端无法获取此文件并使其“可下载”,所以我试图将其转换为 base 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
解决方案
推荐阅读
- c# - c# - 在 WebApiConfig 中忽略空/空值和 guid 为空
- winforms - 如何在powershell中更改ListBox中项目的高度?
- delphi - 如何将多个 TcxDBTextEdit 与存储在单个 DB 字段中的格式化数据一起使用?
- html - 如何制作带有粘性表头的 Bootstrap 表?
- java - 用于从数据库读取和更新 REST 服务器的多线程 Java 控制台应用程序
- uwp - UWP 中的下拉按钮
- python - 为 isValid() 方法检查定义数据字符串/值的一部分的词是什么?
- php - 如何查找和编辑登录的“php页面”和更改详细信息
- reactjs - 如何在本机反应中使用WebView检查嵌入视频是否结束
- sql - 从列到行的总和