jsPDF、express和axios:addImage PNG损坏

mum43rcc  于 2022-11-23  发布在  iOS
关注(0)|答案(1)|浏览(153)

我在express/node中使用jspdf生成一个带有PNG图像的PDF,然后通过axios将其返回到前端。如果我在服务器端使用fs.appendFile保存它,它看起来很好。但是在我从前端下载的版本中,图像被弄乱了。我知道这与服务器端或客户端的编码有关。但我就是想不出来。任何帮助都很感激!谢谢!
前端代码:

axios
  .put('/api/open/print/plan/60abcdb1480b2a000acd4ce6', { responseType: 'arraybuffer' })
  .then(response => {
     let blob = new Blob(
       [response.data],
       { type: response.headers['Content-Type'] }
      )
      const url = window.URL.createObjectURL(blob);
      const link = document.createElement('a');
      link.href = url;
      link.setAttribute('download', 'tables2.pdf');
      document.body.appendChild(link);
      link.click();
    })

服务器端代码:

const doc = new JsPDF('landscape')
const file = fs.readFileSync(path.join(path, 'logo-128x128.png')).toString('base64')
...
const totalPages = doc.internal.getNumberOfPages()
for (let i = 1; i <= totalPages; i++) {
  doc.addImage(file, "PNG", doc.internal.pageSize.getWidth() - 25.4, 5.08, 12.7, 12.7)
}
res.send(new Buffer.from(doc.output('arraybuffer')))

服务器端的正确文件:

从前端下载的文件错误:

0vvn1miw

0vvn1miw1#

节点:

// send document output
const output = doc.output('arraybuffer')
const buffer = Buffer.from(output, 'ascii')
res.send(buffer)

和前端,使用responseType 'blob',然后:

const blob = new Blob([res])
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')

相关问题