AWS Lambda Node.js 使用 PhantomJS 生成 PDF

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

我正在尝试创建一个 lambda 函数,该函数将使用

pdf-creator-node
包(构建在
html-pdf
之上)从 HTML 模板文件生成 PDF 文件。该函数能够很好地找到模板,并且我已经记录了 html 并验证了它是否正确,但是当我尝试生成实际的 PDF 时,出现以下错误:

Error: html-pdf: Unknown Error
Error executing phantom at /usr/local/bin/phantomjs
Error: spawn /usr/local/bin/phantomjs ENOENT
    at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
    at onErrorNT (internal/child_process.js:470:16)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)
events.js:291
      throw er; // Unhandled 'error' event
      ^

Error [ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed
    at doWrite (_stream_writable.js:399:19)
    at writeOrBuffer (_stream_writable.js:387:5)
    at Socket.Writable.write (_stream_writable.js:318:11)
    at Socket.ondata (_stream_readable.js:718:22)
    at Socket.emit (events.js:314:20)
    at addChunk (_stream_readable.js:297:12)
    at readableAddChunk (_stream_readable.js:272:9)
    at Socket.Readable.push (_stream_readable.js:213:10)
    at Pipe.onStreamRead (internal/stream_base_commons.js:188:23)
Emitted 'error' event on Socket instance at:
    at errorOrDestroy (internal/streams/destroy.js:108:12)
    at Socket.onerror (_stream_readable.js:754:7)
    at Socket.emit (events.js:314:20)
    at errorOrDestroy (internal/streams/destroy.js:108:12)
    at onwriteError (_stream_writable.js:418:5)
    at onwrite (_stream_writable.js:445:5)
    at doWrite (_stream_writable.js:399:11)
    at writeOrBuffer (_stream_writable.js:387:5)
    at Socket.Writable.write (_stream_writable.js:318:11)
    at Socket.ondata (_stream_readable.js:718:22) {
  code: 'ERR_STREAM_DESTROYED'
}

这是我的代码

import pdf from 'pdf-creator-node';

export const generatePdf = (template: string, filename: string) => {
const templateFile = `src/templates/${template}.html`;
  try {
    // Read HTML Template
    const html = fs.readFileSync(templateFile, 'utf8');

    const options = {
      format: 'A3',
      orientation: 'portrait',
      height: '900px',
      width: '1100px',
      phantomPath: 'node_modules/phantomjs-prebuilt/bin/phantomjs',
    };

    const document = {
      html,
      data: {
        data,
      },
      path: `${filename}`,
      type: '',
    };

    await pdf.create(document, options);

    return true;
  } catch (error) {
    console.log(error);
    throw Error(error);
  }
}

错误消息让我认为 phantomjs 二进制文件未包含在构建中,但是当我浏览部署包(从 Lambda 下载)时,我可以在

'node_modules/phantomjs-prebuilt/bin/phantomjs'
处看到该二进制文件。我觉得很奇怪,错误消息给出了路径
usr/local/bin/phantomjs

非常感谢对此的任何帮助!

node.js aws-lambda phantomjs html-pdf
1个回答
0
投票

尝试以下方法 -

 1. import phantom from "phantomjs-prebuilt"
 2. const options = {
      ....
      ....
      phantomPath: phantom.path,
    };
© www.soinside.com 2019 - 2024. All rights reserved.