我非常接近在Meteor js中生成PDF报告,这将有助于许多人。我的代码几乎一直运行到最后,但最终出现错误
{[错误:ENOENT,打开'report.pdf']错误:34,代码:'ENOENT',路径:'report.pdf'}
以下是我用来生成PDF列表的代码段。
的layout.html
<head>
<style type="text/css">
{{css}}
</style>
</head>
<body>
{{> Template.dynamic template=template data=data}}
</body>
report.html
<body>
<div class="container">
{{#each voters}}
<h4>{{name}}</h4><br>
{{/each}}
</div>
</body>
服务器/ method.js
var total = voters.find()
Meteor.methods({'generate_pdf': function() {
console.log("--------inside PDF generation Module----------");
var fs = Npm.require('fs'),
Future = Npm.require('fibers/future'),
fut = new Future(),
fileName = "report.pdf",
voters = total,
data = { voters: voters }
SSR.compileTemplate('layout', Assets.getText('layout.html'));
SSR.compileTemplate('report', Assets.getText('report.html'));
var html_string = SSR.render('layout', { template: "report", data: data });
var options = {
"paperSize": { "format": "Letter", "orientation": "portrait", "margin": "1cm" },
siteType: 'html'
};
console.log("------------Commencing webshot-----------");
webshot(html_string, fileName, options, function(err) {
fs.readFile(fileName, function (err, data) {
if (err) {
return console.log(err);
}
fs.unlinkSync(fileName);
fut.return(data);
});
});
console.log("------------Waiting till PDF generated-----------");
let pdfData = fut.wait();
let base64String = new Buffer(pdfData).toString('base64');
console.log("------------Return result-----------");
return base64String;
}
});
带按钮的触发点:home.html
<template name="home">
<div class="container">
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<a href="#" class="generate-pdf">Generate PDF</a>
</div>
</div>
</div>
</template>
home.js
Template.home.events({
'click .generate-pdf': function(e, tmpl) {
e.preventDefault();
Meteor.call('generate_pdf', function(err, res) {
if (err) {
console.error(err);
} else if (res) {
window.open("data:application/pdf;base64, " + res);
}
})
}
});
错误登录控制台:
=> Meteor server restarted
=> Client modified -- refreshing
I20160509-16:17:04.639(5.5)? --------inside PDF generation Module----------
I20160509-16:17:14.617(5.5)? ------------Commencing webshot-----------
I20160509-16:17:14.622(5.5)? ------------Waiting till PDF generated-----------
I20160509-16:17:14.712(5.5)? { [Error: ENOENT, open 'report.pdf'] errno: 34, code: 'ENOENT', path: 'report.pdf' }
答案 0 :(得分:1)
最初,我使用Phantomjs创建PDF并在单独的TAB上显示以下meteor包: [对于Meteor版本 1.3.2.4 ]
<强> 1。 dfischer:phantomjs 强>
<强> 2。 meteorhacks:SSR 强>
第3。 jaredmartin:将来强>
<强> 4。 meteorhacks:NPM 强>
<强> 5。 bryanmorgan:webshot 强>
经过数小时的调试后,我发现我必须删除 bryanmorgan:webshot 包并手动添加“webshot”的包条目:“0.15.4”在 Project / packages.json 文件中。简而言之,我必须将npm的webshot 添加到我的流星项目中。
然后,我不得不重新启动流星,它起作用了。