我有一个代码如下:
var info = {
"Company": "ABC",
"Team": "JsonNode",
"Number": 4,
"Time": "1 day"
};
var layout = "<ol><li>Info: </li><ol><ul>Company: {{info.Company}}</ul><ul>Team: {{info.Team}}</ul></ol><li>Number: {{info.Number}}</li><li>Time: {{info.Time}}</li><ol>";
function generatePdf(layout,info)
{
var wkhtmltopdf = require('wkhtmltopdf');
console.log('generating pdf');
wkhtmltopdf(layout, {
//console.log('debug');
output: './file.pdf',
"viewport-size": "1280x1024",
"page-width": "400",
"page-height": "600"
});
}
generatePdf(layout,info);
现在我可以生成pdf文件,但pdf文件的内容不对。是:
1. Info:
Company: {{info.Company}}
Team: {{info.Team}}
2. Number: {{info.Number}}
3. Time: {{info.Time}}
我的问题是:
1:如何将html模板(var layout)与文件分开。
2:info.Company必须是ABC,info.Number必须是4
请给我一个帮助!
答案 0 :(得分:1)
请重新排列您的布局变量并检查
var layout = "<ol><li>Info: </li><ol><ul>Company:"+info.Company+"</ul><ul>Team: "+info.Team+"</ul></ol><li>Number:"+info.Number+"</li><li>Time:"+info.Time+"</li><ol>";
答案 1 :(得分:1)
如果你的javascript在Node.js中运行,你可以使用
var layout = require("./layout.json");
从文件中获取布局。我认为在你的webapp上你使用angular来替换{{var}}
的内容,但是如果你生成一个PDF就没有角度来写这些值,这意味着你必须在JS中这样做
layout.replace("{{info.Company}}",info.Company);
答案 2 :(得分:0)
我找到了我朋友的解决方案:代码如下,适用于我的情况。 他使用swig,一个模板引擎:
// get json object from json file
var info = require('./data.json');
var wkhtmltopdf = require('wkhtmltopdf');
var swig = require('swig');
// Compile a file and store it, rendering it later
var tpl = swig.compileFile('public/template.html');
var layout = tpl({ info: info});
function generatePdf(layout,info) {
wkhtmltopdf(layout, {output: './file.pdf'});
}
exports.create_pdf_file = function() {
generatePdf(layout,info);
}
我发布回答。也许有人需要它