html-pdf: 无法加载 PhantomJS 模块。使用 aws ec2 时,您必须使用“options.phantomPath”设置 PhantomJS 二进制文件的路径

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

我有 EC2 实例在 aws 中运行。当我部署到服务器后。一切正常,直到我检查 html-pdf。每次我点击 api 创建 pdf 时,我都会检查日志,结果是:

我已经尝试使用 npm uninstall html-pdf 卸载 html pdf,然后使用 npm install html-pdf

再次安装

我已经尝试使用 npm link phantomjs-prebuilt 但仍然有相同的结果。当我检查当地一切工作正常时,是否有人遇到这样的相同问题并且已经解决?谢谢!

*更新:

我已经尝试全局安装 phantomjs,并使用以下方法设置幻像路径:

"phantomPath":"../../../../../usr/local/lib/node_modules/phantomjs-prebuilt/bin/phantomjs"

我从节点模块获得的路径:

这是我的代码:

createOwn: async function (req, res, next) {
      try {
          const owner = await getOwnership(req.params.id);
          const name = await Date.now();
          ejs.renderFile(path.join(__dirname, './template', "own.template.ejs"), { own: owner, moment: moment, }, (err, data) => {
              if (err) {
                  console.log(err);
                  return res.status(500).json({ status: "error", data: err });
              } else {
                  let options = {
                      "format": "A4",
                      "orientation": "portrait",
                      "phantomPath": "../../../../../usr/local/lib/node_modules/phantomjs-prebuilt/bin/phantomjs",
                      "border": {
                          "top": "1cm",            // default is 0, units: mm, cm, in, px
                          "right": "2cm",
                          "bottom": "1cm",
                          "left": "1cm"
                      },
                  };
                  pdf.create(data, options).toFile(`temp/${name}.pdf`, function (err, data) {
                      if (err) {
                          console.log(err)
                          res.send("cannot create pdf");
                      } else {
                          var file = `temp/${name}.pdf`;
                          fs.readFile(file, function (err, data) {
                              res.contentType("application/pdf");
                              res.send(data);
                          });
                      }
                  });
              }
          });
      } catch (e) {
          console.log(e)
          return res.status(500).json({ status: "error", data: "internal server error" });
      }
  },
node.js amazon-ec2 phantomjs node-html-pdf
2个回答
0
投票

尝试设置phantomJS的路径

var option={
"phantomPath": "./node_modules/phantomjs/bin/phantomjs", 
}
var fs = require('fs');
var pdf = require('html-pdf');
var html = fs.readFileSync('./test/businesscard.html', 'utf8');


pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) {
  if (err) return console.log(err);
  console.log(res); // { filename: '/app/businesscard.pdf' }
});

0
投票

要解决此问题,请访问

通过终端打开

node_modules文件夹并使用命令

sudo node ./install.js
sudo node ./install.js -f

这肯定会安装这个模块。

© www.soinside.com 2019 - 2024. All rights reserved.