reactjs 将缓冲区转换为PDF

r9f1avp5  于 2022-11-04  发布在  React
关注(0)|答案(1)|浏览(191)

我正在服务器上使用Puppeteer建立一个PDF文件,并将其作为缓冲区返回给客户端下载。我不明白为什么这个转换不能用于下载。如果我在服务器端下载,一切都正常。我哪里出错了?

onSuccess(data) {
      const blob = new Blob([data as Buffer], { type: 'application/pdf' })
      const link = document.createElement('a')
      link.href = window.URL.createObjectURL(blob)
      link.download = 'test.pdf'
      link.click()
    },
qpgpyjmq

qpgpyjmq1#

这种情况总是发生,我发现它的权利后,张贴。
答案是微妙的。我使用React Query来获取数据。从Node和Puppeteer返回的缓冲区如下所示:

{ type: Buffer, data: [...] }

要转换的数据位于data属性上,而不是Buffer本身。因此,正确的代码如下所示:

onSuccess(data) {
      const blob = new Blob([data.data as Buffer], { type: 'application/pdf' })
      const link = document.createElement('a')
      link.href = window.URL.createObjectURL(blob)
      link.download = 'test.pdf'
      link.click()
    },

这让我感觉很不爽(让TS很不爽),所以我继续搜索,决定在返回客户端之前将PDF转换为base64,这看起来也很有效。在服务器上,看起来像这样:

const pdf = await page.pdf()
 const base64 = pdf.toString('base64')
 return `data:application/pdf;base64,${base64}`

相关问题