Node.js 使用jsrender从jsreport渲染并返回pdf文件

Node.js 使用jsrender从jsreport渲染并返回pdf文件,node.js,jsrender,jsreport,Node.js,Jsrender,Jsreport,如何将jsrender模板传递给jsreport jsreport内容部分需要html。如何在jsreport内容部分使用该jsrender模板 var jsreport = require('jsreport'); // Require the jsrender node module var jsrender = require('jsrender'); // Load a template var tmpl = jsrender.templates('./personTemplate

如何将jsrender模板传递给jsreport

jsreport内容部分需要html。如何在jsreport内容部分使用该jsrender模板

var jsreport = require('jsreport');

// Require the jsrender node module
var jsrender = require('jsrender');

// Load a template 
var tmpl = jsrender.templates('./personTemplate.html');

// Render
var html = tmpl.render({data: 'hello'});

// Generating PDF file using jsreport
jsreport.render({
    template: {
        content: ,                
        engine: "jsrender",
        recipe: "phantom-pdf"
    }
}).then(function(out){         
    out.stream.pipe(fs.createWriteStream('..//test.pdf'));
});

jsreport将为您编译和呈现jsrender模板。假设您将模板字符串传递给内容

jsreport.render({
        template: {
            //content: '{{:foo}}'
            content: fs.readFileSync('personTemplate.html'),                
            engine: "jsrender",
            recipe: "phantom-pdf",
            data: { 'foo': 'hello' }
        }
    })

如果希望自己编译和呈现模板,可以将引擎设置为
none
,并为
内容提供最终html,因为您知道Jsreport的内容是.html文件。因此,首先必须使用服务器端代码读取.html文件,并将其作为jsreport的内容传递

假设您使用c#作为服务器端,并且content.html文件(模板)位于如下位置

string _contentPath = @"D:/WF/DemoApp/Templates/content.html";
现在,让我们阅读文件内容如下

public string ReadContent()
{
  return File.ReadAllText(_contentPath);
}
现在按如下方式传递Jsreport中的内容

template: {
    content: ReadContent(),                
    engine: "jsrender",
    recipe: "phantom-pdf"
}
这就是我所做的,并修复了我的项目中类似的问题。
进一步阅读文章了解更多信息。

事实上,不再需要节点jsrender节点模块,因为jsrender本身就是一个节点模块。看见我更新了您的代码以直接使用jsrender。使用var html=jsrender.renderFile('./personTemplate.html',{data:'hello'})进行工作。将var html传递给jsreport内容。