html-pdf-节点资源库无法与heroku搭配使用

bcs8qyzn  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(103)

我正在使用这个html-pdf-node库在nodejs端将html转换为pdf文件。转换后它返回pdf缓冲区,我用它发送到邮件。
下面是代码

const file = { content: attachementPdfContentString };

return htmlToPdf.generatePdf(file, options).then(pdfBuffer => {
      try {
        return this.sendMail({
          to: hotelEmail,
          subject: "Dashback Invoice",
          body: `Hi `,
      attachments: [
        {
          filename: 'invoice.pdf',
          content: Buffer.from(pdfBuffer, 'utf-8')
        }
      ]
    });
  } catch (err) {
    console.error("Unable to send mail for hotel invitation", JSON.stringify(invoice));
    throw err;
  }

这在本地系统上是有效的,pdf是通过nodemailer发送到邮件的。但是当我在heroku dyno上运行同样的代码时,它显示

2022-11-29T15:43:13.506732+00:00 app[web.1]: Error: Failed to launch the browser process!
2022-11-29T15:43:13.506734+00:00 app[web.1]: /app/node_modules/puppeteer/.local-chromium/linux-901912/chrome-linux/chrome: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory
2022-11-29T15:43:13.506734+00:00 app[web.1]: 
2022-11-29T15:43:13.506734+00:00 app[web.1]: 
2022-11-29T15:43:13.506735+00:00 app[web.1]: TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md
2022-11-29T15:43:13.506735+00:00 app[web.1]: 
2022-11-29T15:43:13.506735+00:00 app[web.1]:     at onClose (/app/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:197:20)
2022-11-29T15:43:13.506736+00:00 app[web.1]:     at Interface.<anonymous> (/app/node_modules/puppeteer/lib/cjs/puppeteer/node/BrowserRunner.js:187:68)
2022-11-29T15:43:13.506736+00:00 app[web.1]:     at Interface.emit (node:events:525:35)
2022-11-29T15:43:13.506737+00:00 app[web.1]:     at Interface.close (node:internal/readline/interface:536:10)
2022-11-29T15:43:13.506738+00:00 app[web.1]:     at Socket.onend (node:internal/readline/interface:262:10)
2022-11-29T15:43:13.506738+00:00 app[web.1]:     at Socket.emit (node:events:525:35)
2022-11-29T15:43:13.506738+00:00 app[web.1]:     at endReadableNT (node:internal/streams/readable:1359:12)
2022-11-29T15:43:13.506739+00:00 app[web.1]:     at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

我怎么能解决这个问题,或者任何其他的库或方法?

bxjv4tth

bxjv4tth1#

看起来您缺少一个库。
libnss3.so is found in the libnss3 Ubuntu package。您可以使用the apt buildpack
1.添加apt构建包作为您的第一个构建包,例如通过运行

heroku buildpacks:add --index 1 heroku-community/apt

1.在项目的根目录中创建一个名为Aptfile的文件,其中包含要安装的Ubuntu包的名称,例如

libnss3

请注意,可能需要额外的软件包(见下文)。
1.提交并重新部署。
注意apt构建包不做依赖性解析。如果你在这里添加依赖于其他包的包,你可能需要手动列出那些依赖性。

铬依赖性

运行Chromium或Chrome所需的确切依赖项可能会因发行版和Ubuntu版本的不同而不同,但Puppeteer网站上的依赖项列表是一个很好的起点:

ca-certificates
fonts-liberation
libappindicator3-1
libasound2
libatk-bridge2.0-0
libatk1.0-0
libc6
libcairo2
libcups2
libdbus-1-3
libexpat1
libfontconfig1
libgbm1
libgcc1
libglib2.0-0
libgtk-3-0
libnspr4
libnss3
libpango-1.0-0
libpangocairo-1.0-0
libstdc++6
libx11-6
libx11-xcb1
libxcb1
libxcomposite1
libxcursor1
libxdamage1
libxext6
libxfixes3
libxi6
libxrandr2
libxrender1
libxss1
libxtst6
lsb-release
wget
xdg-utils

此列表可能会更改,并且不保证完整。建议您访问Puppeteer站点以获取更新的列表,如果您发现缺少其他库,您可以如上所述一次添加一个。

相关问题