2015-11-05 46 views
2

如何将jsrender模板传递给jsreport?使用jsrender呈现并返回来自jsreport的pdf文件

jsreport content section requires 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')); 
}); 
+0

事实上,node-jsrender节点模块不再需要,因为jsrender本身就是一个节点模块。见http://www.jsviews.com/#jsr-node-quickstart。我更新了你的代码直接使用jsrender。 – BorisMoore

+0

使用 工作var html = jsrender.renderFile('./ personTemplate.html',{data:'hello'})。 将var html传递给jsreport内容。 – krt

回答

0

jsreport编译和渲染jsrender模板为您服务。您假设将模板字符串传递给内容。

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

如果你想编译并呈现在您自己的模板,可以将发动机设置为none,并提供最终的HTML到content

0

正如您所知道的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" 
} 

这就是我所做的,并解决了我的项目中的类似问题。 更多信息请阅读有关Getting Started with JsReport的文章。