代码之家  ›  专栏  ›  技术社区  ›  rahulfaujdar

AWS LAMBDA节点JS中的HTML到PDF

  •  -1
  • rahulfaujdar  · 技术社区  · 1 年前

    HTML到PDF

    我在AWS Lamda上使用Nodejs16环境,并将HTML转换为PDF。

    我使用了很多库,如puppeteer和chrome-aws lambda。

    木偶师正在本地或服务器上工作。但它不适用于aws-lambda或serverless。

    
    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:
    
    0 回复  |  直到 1 年前
        1
  •  0
  •   SteveR    1 年前

    在过去,我有一些运气 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规范! 祝你好运