如何从Meteor 1.4.4.2中的HTML和服务器端的1.5生成PDF

时间:2017-05-17 14:32:59

标签: meteor

我在Meteor 1.4.4.2和1.5中使用HTML创建PDF时遇到问题,这是迄今为止的最新版本。

我想知道如何在服务器端从HTML创建PDF?

1 个答案:

答案 0 :(得分:2)

以下是使用Meteor 1.4.4.2从HTML模板生成PDF的步骤

  1. 请转到 PROJECT/.meteor/packages 文件,然后按以下方式添加包

    meteorhacks:ssr
    bryanmorgan:webshot
    
  2. 根据Meteor 1.4.4.2指南,确保要转换为pdf的html页面必须位于PROJECT/private位置。在此示例中,文件名为app_clientagreement.html(文件是简单的html)。
  3. 我们现在将在服务器端创建一个方法来生成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;
      }
    });
    
  4. 要在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);
            }
          });
    });
    
  5. 当您调用上面的模板(即'App_Agreement')时,会打开一个新标签页并呈现PDF。