我正在尝试创建一个 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
。
非常感谢对此的任何帮助!
尝试以下方法 -
1. import phantom from "phantomjs-prebuilt"
2. const options = {
....
....
phantomPath: phantom.path,
};