如何在单击按钮时将 node.js 网络应用程序的页面转换为 pdf?

How to convert page of node.js web app to a pdf on button click?

我正在使用 node、express 和 ejs 构建网络应用程序,我想在单击按钮时将页面转换为 pdf

为按钮创建的请求的路由定义如下:

const gp = require('./generatePDF');

app.get('/pdf', gp.generatePDF)

函数是这样处理的:

const generatePDF = (request, response) => {
   /* do some stuff to generate content on the ejs page */
   response.render('pages/pagetoconverttoPDF');

}

module.exports = {
  generatePDF,
}

pdf 的形式下载/查看此页面的最佳方式是什么?

如果您想在 html 中嵌入 pdf,您可以使用 <embed> 标签或 <iframe> 标签。更多相关信息:How to display PDF file in HTML?

但是,如果您希望独立提供 pdf,您可以静态提供 pdf,浏览器将呈现它,并提供下载和打印选项。

我想出了如何使用 ejs.renderFile 完成此操作(从 html 生成 pdf),如下所示:

const generatePDF = (request, response) => {
  var dataToDisplay = request.body;
  ejs.renderFile('./views/pages/admin/employeedatapdf.ejs', {d: dataToDisplay}, (err, data) => {
        if (err) {
          console.log(err);
          response.send(err);
        } else {
          let options = {
            "height": "11.25in",
            "width": "8.5in",
            "header": {
                "height": "20mm"
            },
            "footer": {
                "height": "20mm",
            },
          };
          let filename = "generatedpdf.pdf";
          pdf.create(data).toFile(filename, function (err, data) {
            let fileloc = 'full path' + filename;
            if (err) {
              response.send(err);
              console.log("error occured")
            } else {
              fs.readFile(fileloc, function (err, data) {
                console.log("generating pdf");
                response.contentType("application/pdf");
                response.send(data);
              });
            }
          })
        }
      });
}