【问题标题】:Render HTML with variable data and convert to PDF使用可变数据渲染 HTML 并转换为 PDF
【发布时间】:2017-07-03 01:56:01
【问题描述】:

我有一个 html 模板页面,我想通过 EJS 填写数据,之后我想将此完成的页面传递给 PDF 创建者;最终结果是我的页面的一个很好的 PDF 版本,里面充满了我的数据。

对于 PDF 创建者,我使用 NPM html-pdf 进行转换。问题是,我不知道有什么方法可以用我的数据呈现页面,自动保存,然后将完成的页面传递给 PDF 创建者,因为 PDF 创建者只接受保存网页的服务器路径。

也许我以错误的方式接近这个,但下面是我目前拥有的,诚然不是很多。任何正确方向的帮助将不胜感激。

var renderPDF = function() {
  var pdf = require('html-pdf');
  // pulls html page
  var html = fs.readFileSync('views/assets/html/render.ejs', 'utf8');
  var options = {};
  // creates views/test.pdf
  pdf.create(html, options).toFile('views/test.pdf', function(err, res) {
    if (err) return console.log(err);
    console.log(res);
  });
};
// this is how I usually render ejs files with data
response.render('assets/html/render.ejs', {myDataOject});
// start the conversion
renderPDF();

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    这里是解决方案。 我们读取 EJS 的模板文件,然后编译成 PDF 格式。

    index.js

    var fs = require('fs');
    var ejs = require('ejs');
    var pdf = require('html-pdf')
    var compiled = ejs.compile(fs.readFileSync(__dirname + '/template.html', 'utf8'));
    var html = compiled({ title : 'EJS', text : 'Hello, World!' });
    
    pdf.create(html).toFile('./result.pdf',() => {
        console.log('pdf done')
    })
    

    模板.html

    <html>
    <head>
        <title><%= title %></title>
    </head>
    <body>
        <p><%= text %></p>
    </body>
    

    【讨论】:

    • 我有一个问题,如果我希望它是动态的,你如何从路由器调用/访问 toFile?
    • @CherylBlossom 这里是您的模板文件的路径,您可以更改为您喜欢的任何文件。
    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2019-02-04
    • 2021-04-12
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 2016-10-14
    • 2020-04-12
    相关资源
    最近更新 更多