我有一个使用 html-pdf 包的简单项目,我想用以下代码制作一个简单的 pdf 文件:
...
pdf.create(html).toStream(function(err, stream){
if (err) reject(err) ;
else stream.pipe(fs.createWriteStream(path.join(__dirname, '../../../assets/docs/idv_docs/')+data.link+'.pdf'));
});
...
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
Error: html-pdf: Received the exit code '1'
cc-server_1 | Auto configuration failed
cc-server_1 | 139666354437760:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libssl_conf.so): libssl_conf.so: cannot open shared object file: No such file or directory
cc-server_1 | 139666354437760:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
cc-server_1 | 139666354437760:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=ssl_conf, path=ssl_conf
cc-server_1 | 139666354437760:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=ssl_conf
cc-server_1 |
cc-server_1 | …
Run Code Online (Sandbox Code Playgroud) 长话短说:
更长的版本:
在 NodeJS 服务器中,我们需要根据请求参数将 HTML 字符串转换为 PDF 或 PNG。我们正在使用 puppeteer 生成部署在谷歌云功能中的 PDF 和 PNG(屏幕截图)。在我本地的 Docker 中运行此应用程序并将内存使用量限制为 100MB,这似乎有效。但是在云函数中,当我们将云函数设置为250MB内存时,它会抛出内存限制异常。作为临时解决方案,我们将云功能升级到 1 GB。
我们希望在没有任何无头浏览器方法的情况下尝试 puppeteer 的任何替代方案。另一个库 PDF-Kit 看起来不错,但它有 canvas api 类型的输入。我们不能直接提供 html。
对此有任何想法或意见
在 Python(首选)或 NodeJS 中寻找可以从动态 html 模板生成 pdf 文件的库的推荐,以便在 AWS 中运行。要求是生成发票pdf发送给客户。
遇到过以下 2 个 Node 库:
这里我们可能需要处理 X 和 Y 的数字。
更好的方法是我们可以简单地使用 html/css 生成带有占位符的模板,这些占位符可以替换为动态数据(来自数据库查询)。任何建议,将不胜感激。
谢谢!
我编写了一个 NodeJS 类,它应该从 html 字符串中创建一个 PDF 文件。该类部署在 AWS Lambda 上。它基于 html-pdf ( https://www.npmjs.com/package/html-pdf )。
const {readFileSync} = require('fs');
const pdf = require('html-pdf');
process.env['PATH'] = process.env['PATH'] + ':' + process.env['LAMBDA_TASK_ROOT'];
const options = { format: 'Letter' };
const createPDF = async (fileName, data) => {
let text = readFileSync('./templates/' + fileName + '.html','utf8');
data.forEach(element => {
text = text.replace("{{{" + element[0] + "}}}",element[1]);
});
console.log(text);
return new Promise(function(resolve, reject) {
pdf.create(text, options).toBuffer(function (err, buffer) {
if (!err)
resolve(buffer);
else
console.log(buffer)
}); …
Run Code Online (Sandbox Code Playgroud) 我一直在使用 html-pdf (phantomjs) 在 AWS Lambda 上使用 NodeJS 8.0 创建 PDF,并且工作正常。由于 AWS Lambda 已停止对 NodeJS 8.0 的支持,我们已将 NodeJS 版本更新到最新的 12.x,现在在运行 PDF Lambda 函数时出现以下错误:
{"errorType":"Error","errorMessage":"write EPIPE","code":"EPIPE","errno":"EPIPE","syscall":"write","stack":["Error: write EPIPE"," at afterWriteDispatched (internal/stream_base_commons.js:154:25)"," at writeGeneric (internal/stream_base_commons.js:145:3)"," at Socket._writeGeneric (net.js:784:11)"," at Socket._write (net.js:796:8)"," at doWrite (_stream_writable.js:403:12)"," at writeOrBuffer (_stream_writable.js:387:5)"," at Socket.Writable.write (_stream_writable.js:318:11)"," at PDF.PdfExec [as exec] (/var/task/node_modules/html-pdf/lib/pdf.js:141:15)"," at PDF.PdfToBuffer [as toBuffer] (/var/task/node_modules/html-pdf/lib/pdf.js:44:8)"," at /var/task/index.js:121:38"]}
phantomPath: './phantomjs_lambda/phantomjs'
Run Code Online (Sandbox Code Playgroud)
process.env.FONTCONFIG_PATH='/var/task/fonts'
Run Code Online (Sandbox Code Playgroud)
我尝试在 StackOverflow 中检查类似的问题。我已经正确地指出了 phantomjs 路径,并且还设置了 fontconfig。我们现在陷入困境,因为无法更新 Lambda 函数。任何帮助将不胜感激。
更新:更改了 phantomjs 二进制文件的路径:
phantomPath: './node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs'
更改 phantomjs 二进制文件的路径后,错误已更改为:
{"errorType":"Error","errorMessage":"write …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 html 模板代码中的 pdf 放在一起。我遇到的问题是我尝试过的 html-pdf 转换器没有正确格式化 css,我猜它们还与 css flex-box 不兼容。
我研究了两种方法:
在 Node.js 上使用 html-pdf 包
在python中使用jinja2、pdfkit和wkhtmltopdf
这两种方法都允许我对 html 进行模板化并从 html 动态构建 pdf,但 css 转换不能 100% 工作(css flex-box 失败)。
关于可以处理css flex-box的html到pdf转换器的任何想法?或者,有没有人知道上述方法的任何修复程序,以便他们可以处理 css flex-box?只想从 css flex-box 样式的 html 制作 pdf。
谢谢!
尝试在节点 js 中使用 html-pdf 生成 pdf,但在某些记录后出现以下错误:
TypeError: Cannot read property 'on' of undefined`
events.js:183
throw er; // Unhandled 'error' event
^
Error: spawn /usr/local/lib/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs EAGAIN
Run Code Online (Sandbox Code Playgroud)
代码:
const filePathName = path.join(__dirname, '../../../views/', "invoice.ejs");
const htmlString = fs.readFileSync(filePathName).toString();
let options = { format: 'Letter',"timeout": 600000 };
const ejsData = ejs.render(htmlString, data);
return pdf.create(ejsData, options).toFile(path.join(__dirname, '../../../tmp/', data.filename), (err, response) => {
if (err) return console.log('err',err);
return response;
});
Run Code Online (Sandbox Code Playgroud) 我在我的 lambda 函数中使用“html-pdf”模块。下面是我的代码
await pdf.create(html, options).toStream(async function (err, stream) {
if(err) {
return err;
}
let fileName = NAME_OF_FILE;
let key = KEY;
let data = await s3Upload(key, stream) // function to upload to s3
});
Run Code Online (Sandbox Code Playgroud)
代码在本地似乎运行良好。但是在 lambda 中我收到了这个错误
错误:html-pdf:收到退出代码“127”/var/task/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs:加载共享库时出错:libfontconfig.so.1:无法打开共享对象文件:无此文件或目录
有任何想法吗 ?提前致谢!
我正在使用库html-pdf渲染 pdf,然后通过电子邮件发送文件。它在本地主机上就像一个魅力
pdf.create(html, {format: 'A4'}).toFile(`./public/invoices/${order.id}.pdf`, (err, res) => {
if (err) return console.log(err);
});
Run Code Online (Sandbox Code Playgroud)
目前我在 Heroku 上托管 Nodejs。在 pdf.create() 执行之前它工作正常。出现此错误:
2022-08-25T21:32:13.925568+00:00 app[web.1]: Auto configuration failed
2022-08-25T21:32:13.925570+00:00 app[web.1]: 139861897091008:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libproviders.so): libproviders.so: cannot open shared object file: No such file or directory
2022-08-25T21:32:13.925571+00:00 app[web.1]: 139861897091008:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
2022-08-25T21:32:13.925572+00:00 app[web.1]: 139861897091008:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=providers, path=providers
2022-08-25T21:32:13.925573+00:00 app[web.1]: 139861897091008:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=providers
2022-08-25T21:32:13.925574+00:00 app[web.1]:
2022-08-25T21:32:13.925575+00:00 app[web.1]: at ChildProcess.respond (/app/node_modules/html-pdf/lib/pdf.js:134:17) …
Run Code Online (Sandbox Code Playgroud) html-pdf ×10
node.js ×9
aws-lambda ×3
html ×2
javascript ×2
pdf ×2
pdfkit ×2
phantomjs ×2
aws-sdk ×1
css ×1
ejs ×1
heroku ×1
lambda ×1
puppeteer ×1
python ×1
python-3.x ×1
wkhtmltopdf ×1