我在Meteor 1.4.4.2和1.5中使用HTML创建PDF时遇到问题,这是迄今为止的最新版本。
我想知道如何在服务器端从HTML创建PDF?
答案 0 :(得分:2)
以下是使用Meteor 1.4.4.2从HTML模板生成PDF的步骤
请转到 PROJECT/.meteor/packages
文件,然后按以下方式添加包
meteorhacks:ssr
bryanmorgan:webshot
PROJECT/private
位置。在此示例中,文件名为app_clientagreement.html
(文件是简单的html)。我们现在将在服务器端创建一个方法来生成PDF。该文件位于PROJECT\imports\startup\server\methods.js
位置(请确保将method.js
文件导入PROJECT\imports\startup\server\index.js
作为import './methods.js'
)。在methods.js里面写下代码
import { Meteor } from 'meteor/meteor';
import { SSR, Template } from 'meteor/meteorhacks:ssr';
Meteor.methods({
'generate_pdf'(){
var fs = Npm.require('fs');
var Future = Npm.require('fibers/future');
var fut = new Future();
var fileName = "pokemon-report.pdf";
SSR.compileTemplate('agreement', Assets.getText('app_clientagreement.html'));
var html_string = SSR.render('agreement');
var options = {
"paperSize": {
"format": "Letter",
"orientation": "portrait",
"margin": "1cm"
},
siteType: 'html'
};
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);
});
});
let pdfData = fut.wait();
let base64String = new Buffer(pdfData).toString('base64');
return base64String;
}
});
要在Template中调用此方法,为了便于自动调用,我在呈现模板时调用它。代码如下,
Template.App_Agreement.onRendered(function(){
Meteor.call('generate_pdf', function(err, res) {
if (err) {
console.error(err);
} else if (res) {
window.open("data:application/pdf;base64, " + res);
}
});
});
当您调用上面的模板(即'App_Agreement')时,会打开一个新标签页并呈现PDF。