美文网首页每天一个编程知识点
nodejs 通过html生成pdf文件

nodejs 通过html生成pdf文件

作者: zlx_2017 | 来源:发表于2017-09-05 18:05 被阅读0次

    最近写了一个小功能模块,将html文件转化为pdf文件。

    1.需求

    现在有这么一个需求:
    假设App里面有一份html格式的劳动合同, 需要点击某按钮生成对应的pdf文件保存起来。如图:


    image.png

    这就需要后端来处理,后端为nodejs。依赖了如下的包:

    "dependencies": {
        "html-pdf": "^2.1.0", 
        "moment": "^2.18.1",
        "phantomjs": "^2.1.7"
      }
    

    2.设计函数

    /**
     * Created by saidesun on 17/8/30.
     */
    var pdf = require('html-pdf'); // html-pdf
    exports.createPDFProtocolFile = function (template, options, reg, filename) {
      /**
        template: html 模板
        options: 配置
        reg: 正则匹配规则
        filename: 输出pdf文件路径及文件名
      */
        // 将所有匹配规则在html模板中匹配一遍
        if (reg && Array.isArray(reg)) {
          reg.forEach(item => {
            template = template.replace(item.relus, item.match);
          });
        }
        pdf.create(template, options).toFile(filename, function(err, res) {
            if (err) {
                return console.log(err);
            }
            console.log(res);
        });
    }
    
    

    代码很少,也很简洁。具体功能有:

    • 传入的html模板
    • 生成pdf文件的一些配置
    • 正则替换html模板中的某些字符串(姓名,日期等)的替换规则
    • 输出pdf文件路径及文件名
      核心功能就是调用pdf.create来实现。

    3.调用

    var fs = require('fs');
    var moment = require('moment'); // moment.js
    var html = fs.readFileSync('./test.html', 'utf8'); // 引入html模板
    
    
    var create = require('./create.js'); // 引入写好的函数
    var options = {
        "format": 'A4',
        "header": {
        "height": "10mm",
        "contents": ''
    }}; // 一些配置
    var name = '张三';
    // 匹配规则
    var reg = [
      {
        relus: /__name__/g,
        match: name
      },
      {
        relus: /__date__/g,
        match: moment().format('YYYY年MM月DD日')
      }
    ];
    create.createPDFProtocolFile(html, options, reg, './test.pdf'); // 传入参数 生成pdf
    

    我们的简易的html模板如下:

    模板

    执行文件试一试:

    image.png

    执行函数后,在相应的文件夹下生成了我们指定的pdf文件:

    文件

    打开看一眼:

    image.png

    可见 我们的姓名和日期都正确输出了出来。你可以配置更多的正则匹配规则,来修改更多的信息。

    相关文章

      网友评论

        本文标题:nodejs 通过html生成pdf文件

        本文链接:https://www.haomeiwen.com/subject/qhfpjxtx.html