我想通过wkhtmltopdf将一些html页面转换为pdf。但是,我想要转换为PDF的html页面是使用句柄动态生成的。节点表达如何将handlebars html页面渲染为文件
所以我认为一种解决方案可能是通过句柄生成html页面,但是生成一个文件(html文件)。然后,使用hkhtmltopdf将该文件转换为pdf,然后允许用户以某种方式下载PDF。
所以,我的问题是:如何将(handlebars)动态生成的html页面渲染为文件?
谢谢,再见...
我想通过wkhtmltopdf将一些html页面转换为pdf。但是,我想要转换为PDF的html页面是使用句柄动态生成的。节点表达如何将handlebars html页面渲染为文件
所以我认为一种解决方案可能是通过句柄生成html页面,但是生成一个文件(html文件)。然后,使用hkhtmltopdf将该文件转换为pdf,然后允许用户以某种方式下载PDF。
所以,我的问题是:如何将(handlebars)动态生成的html页面渲染为文件?
谢谢,再见...
创建文件的简单示例。
var Handlebars = require('handlebars');
var source = "<p>Hello, my name is {{name}}. I am from {{hometown}}. I have " +
"{{kids.length}} kids:</p>" +
"<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var template = Handlebars.compile(source);
var data = { "name": "Alan", "hometown": "Somewhere, TX",
"kids": [{"name": "Jimmy", "age": "12"}, {"name": "Sally", "age": "4"}]};
var result = template(data);
var fs = require('fs');
fs.writeFile("test.html", result, function(err) {
if(err) {
return console.log(err);
}
});
嗯,我在这里有点困惑。首先,我使用:var exphbs = require('express-handlebars')。当我试图做“编译”时,我得到这个错误:“Handlebars没有方法'编译'”。我在与“main”不同的文件中使用此代码,其中我使用“create”方法配置Express。我试图在这个文件中添加“创建”部分,但错误是一样的。因为我需要的不是在“main”中,而是在另一个文件(another.js)中,我从“main.js”中请求,我需要为Handlebars接受“编译”方法做什么? –
我认为'express-handlebars'不是官方和完整的软件包。使用此 - https://www.npmjs.com/package/handlebars –
Alex以上的代码完美无缺。但是,我的困惑是:我使用的是“快速车把”而不是“车把手”。现在,我可以理解的是,Express-Handlebars是Express应用程序的Handlebars的实现,我正在使用它。我只是没有找到在Express-Handlebars中使用'compile()'方法的方法,所以我最终安装了Handlebars(独立版),并使用它来编译我的(html)模板并将结果保存到磁盘,就像Alex上面解释道。
总结: 1)我知道Express-Handlebars是快递应用的把手。 2)我不知道如何从express-handlebars中使用“compile()”方法,所以我最终安装了Handlebars(从npm)并在服务器上使用它来生成我的html文件(从模板)并保存它到磁盘。 3)当然我安装并使用Express-Handlebars在我的Express应用程序中为我的页面提供服务;只是安装Handlebars来生成我的HTML(在服务器)与“编译()”方法,并将结果保存到磁盘。
希望这是可以理解的。再次感谢并再见...
这应该只是一个评论,而不是另一个答案,你应该接受亚历克斯的答案,如果它是正确的。 –
使用express-handlebars
,您应该使用高级模式并创建它的一个实例,如this example。
的正确方法是创建一个视图文件(就像你可能已经按照您怀疑),并使用快递车把实例,以使其:
// init code
var exphbs = require('express-handlebars');
var hbs = exphbs.create({
defaultLayout: 'your-layout-name',
helpers: require("path-to-your-helpers-if-any"),
});
app.engine('.file-extention-you-use', hbs.engine);
app.set('view engine', '.file-extention-you-use');
// ...then, in the router
hbs.render('full-path-to-view',conext, options).then(function(hbsTemplate){
// hbsTemplate contains the rendered html, do something with it...
});
HTH
检查的第一个用法示例从这里https://npmjs.com/package/handlebars然后用fs.writeFile写入你的文件 – Miroshko
嗨,Miroshko,谢谢你的回答;请在下面看到我的评论... –