nodejs 通過html生成pdf文件

最近寫了一個小功能模塊,將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

可見 我們的姓名和日期都正確輸出了出來。你可以配置更多的正則匹配規則,來修改更多的信息。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,869評論 18 139
  • 作者:GABRIEL THEODOROPOULOS,原文鏈接,原文日期:2016-7-10譯者:X140Yu;校對...
    梁杰_numbbbbb閱讀 2,027評論 1 8
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,200評論 4 61
  • 懷孕三個月時,到醫院做檢查,醫生說,胎兒在一個半月的時候就不發育了,我需要馬上住院動手術。 我感到一切...
    魚硯之樂閱讀 172評論 0 1
  • 做得最長久的夢 是你許諾陪我一起看的彩虹 放棄才會更輕松 還是保留一份熱忱 不怕你說的風雨兼程 眷戀的是你的溫柔叮...
    陸稚閱讀 149評論 0 0