我想通過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,謝謝你的回答;請在下面看到我的評論... –