Reputation: 6018
I am facing problems while creating a PDF from HTML in Meteor 1.4.4.2 and 1.5 which is latest version till date.
I want to know how to create a PDF from HTML at server side?
Upvotes: 3
Views: 1345
Reputation: 6018
Below are the steps to generate PDF from HTML Template using Meteor 1.4.4.2
Kindly goto PROJECT/.meteor/packages
file and add packages as below
meteorhacks:ssr
bryanmorgan:webshot
PROJECT/private
as per Meteor 1.4.4.2 guidelines. In this example, the file name is app_clientagreement.html
(file is simple html).We will now create a method at server side to generate PDF. The file is at location PROJECT\imports\startup\server\methods.js
(make sure you import the method.js
file inside PROJECT\imports\startup\server\index.js
as import './methods.js'
). Inside methods.js write below code
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;
}
});
To call this method in Template, for ease to get auto-called, I am calling it when a template is rendered. The code is below,
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);
}
});
});
When you call above template (which is 'App_Agreement'), a new tab is opened and a PDF is rendered.
Upvotes: 2