node.js - 使用 html-pdf npm 包生成 pdf,在 AWS 上部署为 GET api
问题描述
我可以在我的 Mac 上本地使用 nodejs 中的 html-pdf 生成 pdf。当我在 AWS 上使用无服务器部署我的 GET api 时,一切都失败了。pdf 没有生成,我收到 400 个错误请求和消息,如html-pdf:收到退出代码 '127'\n/var/task/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs:加载时出错共享库:libfontconfig.so.1:无法打开共享对象文件:没有这样的文件或目录\n
我更改了 html-pdf 包的版本,尝试安装 fontmanager 但没有任何帮助。
//pdf generation class
{
.....
const pdfSettings = {
"border": '1cm',
"header": {
"height": "15mm"
}
};
const PDFBuffer = new Promise((resolve, reject) => {
pdf.create(pdfContent, pdfSettings).toBuffer(
(err, buffer) => {
err ? reject(err) : resolve(buffer);
});
});
const buffer = await PDFBuffer;
return actions.downloadPDF(contactId, buffer);
}
//function which returns pdf in binary to api gateway
downloadPDF(pdfName, pdfBuffer) {
let responseObj = {
statusCode: 200,
isBase64Encoded: true,
headers: {
'Content-type': 'application/pdf',
'accept-ranges': 'bytes',
'Content-Disposition': 'attachment; filename=' + pdfName + '.pdf'
},
body: pdfBuffer && JSON.stringify(pdfBuffer.toString('base64'))
}
return responseObj;
}
我应该能够使用 AWS 中的 GET api 生成 pdf。请让我知道任何可以帮助我解决此问题的宝贵建议。提前致谢
解决方案
通过使用 puppeteer 库,我能够找到更好的解决方案。选择不同图书馆的原因
尽管要使用 serverless 和 serverless-plugin-optimize 在 AWS 中进行这项工作,但我确实面临许多挑战。在实现这种类似场景时注意以下几点
让 API 网关发送任何二进制文件(pdf / jpeg / jpg)作为响应
*/*
在 API Gateway 资源设置选项中设置为,如果通过 serverless.yaml 中的 provider 下的 serverless 添加
apiGateway: binaryMediaTypes: -*/*
推荐阅读
- javascript - tor 浏览器 selenium javascript
- django - django 如何在 pre_save 函数中获取旧值和新值
- c# - 如何通过 .Net 对 Azure Databricks 进行身份验证?
- spring - 处理 POM 时出现 Maven 错误:[致命] 不可解析的 POM...PITarget 带有保留的 xml 名称
- c++ - 如何摆脱 C++ 中的枚举不匹配错误?
- android - Android Studio 调试器中的“f”符号是什么意思?
- css - 图像在网格中未正确对齐 - Bootstrap 4.0
- java - 在 java 中使用新的静态参数在同一程序的代码中运行该程序的另一个实例
- php - 将值从 PHP 发送到 Node JS 以执行
- ios - 框架的部署目标无效