2017-07-03 111 views
1

我有一個html模板頁面,我想通過EJS填充數據,之後我想將完成的頁面傳遞給PDF創建者;最終結果是我的頁面的一個很好的PDF版本充滿了我的數據。使用可變數據呈現HTML並將其轉換爲PDF

對於PDF創建者,我使用NPM html-pdf做了轉換。問題是,我不知道我可以用我的數據呈現頁面,自動保存頁面,然後將完成的頁面傳遞給PDF創建者,因爲PDF創建者只接受保存網頁的服務器路徑。也許我正在接近這個錯誤的方式,但以下是我目前擁有的,這確實並不是很多。任何幫助在正確的方向將不勝感激。

var renderPDF = function() { 
    var pdf = require('html-pdf'); 
    // pulls html page 
    var html = fs.readFileSync('views/assets/html/render.ejs', 'utf8'); 
    var options = {}; 
    // creates views/test.pdf 
    pdf.create(html, options).toFile('views/test.pdf', function(err, res) { 
    if (err) return console.log(err); 
    console.log(res); 
    }); 
}; 
// this is how I usually render ejs files with data 
response.render('assets/html/render.ejs', {myDataOject}); 
// start the conversion 
renderPDF(); 

回答

2

這是解決方案。 我們讀取模板文件,然後用EJS進行編譯。

index.js

var fs = require('fs'); 
var ejs = require('ejs'); 
var pdf = require('html-pdf') 
var compiled = ejs.compile(fs.readFileSync(__dirname + '/template.html', 'utf8')); 
var html = compiled({ title : 'EJS', text : 'Hello, World!' }); 

pdf.create(html).toFile('./result.pdf',() => { 
    console.log('pdf done') 
}) 

template.html

<html> 
<head> 
    <title><%= title %></title> 
</head> 
<body> 
    <p><%= text %></p> 
</body>