在 AWS Lambda 中使用 Puppeteer 将 HTML 转换为 PDF 的挑战

问题描述 投票:0回答:1

HTML 转 PDF

我在使用 Node.js 16 配置的 AWS Lambda 环境中使用 Puppeteer 将 HTML 转换为 PDF 时遇到困难。

尽管 Puppeteer 在本地和服务器环境中可靠工作,但部署在 AWS Lambda 或无服务器设置上时,其性能不一致。

我已经探索了涉及 puppeteer 和 chrome-aws-lambda 等流行库的解决方案,但问题仍然存在。

如果有任何建议或建议来克服这一障碍并在我的无服务器应用程序中成功生成 PDF,我将不胜感激。

我的代码


const chromium = require('chrome-aws-lambda');
const puppeteer = require('puppeteer-core');

exports.handler = async (event) => {

  try {
    const browser = await puppeteer.launch({
      executablePath: await chromium.executablePath,
      args: chromium.args,
      headless: true,
    });

    const page = await browser.newPage();

    await page.setContent("<html><body><h5>Hello World!</h5></body></html>")

    const pdf = await page.pdf({
        format: "A4",
        path: "output.pdf"
    });

    return {statusCode: 200};
  } catch (error) {
    console.error(error);
    return {statusCode: 500};
  }
};

出现此错误

Failed to launch the browser process!\n/tmp/chromium: error while loading shared libraries: libnss3.so: cannot open shared object file: No such file or directory\n\n\nTROUBLESHOOTING:
node.js aws-lambda lambda puppeteer serverless
1个回答
0
投票

过去,我在

html-pdf
库上有过一些运气——根据你的 HTML 页面的简单或复杂程度,你可以尝试这样的事情:

const HtmlPdf = require("html-pdf");
const html = `
<div>
  <h3>Title</h3>
  <hr>
  <p>this is only a test!</p>
</div>`;

HtmlPdf.create(html).toBuffer(function(err, buff) {
    if (err) {
        console.error(err);
        return;
    }
    console.log(buff.toString());
});

显然它不会像无头浏览器那样支持那么多的 HTML 规范! 祝你好运。

© www.soinside.com 2019 - 2024. All rights reserved.