2015-11-05 42 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的文章。