2017-07-03 16 views
1

私は、EJSを介してデータを入力するhtmlテンプレートページを持っています。その後、この完成したページをPDF作成者に渡したいと思います。最終結果は自分のデータで満たされた私のページの素晴らしいPDFバージョンです。可変データでHTMLをレンダリングしてPDFに変換する

PDF作成者の方はNPM html-pdfを使用しています。問題は、私は自分のデータでページをレンダリングし、自動的に保存し、完成したページをPDF作成者に渡すことはできません。なぜなら、PDF作成者は保存されたWebページへのサーバーパスのみを受け入れるからです。

私はこれを間違った方法に近づけているかもしれませんが、以下は私が現在持っていることは間違いありません。適切な方向への助けをいただければ幸いです。

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> 

関連する問題