• nodejs根据word模板生成文档(方法二)


    【推荐该方法,模板比较简洁】

    1,代码,

    这里采用的模块为

    docxtemplater 和 open-docxtemplater-image-module,均为开源(docxtemplater 有收费的image模块)
    
    
      const fs = require('fs')
      const JSZip = require('jszip')
      const Docxtemplater = require('docxtemplater')
      const ImageModule = require('open-docxtemplater-image-module')
      //读取模板文件
      var content = fs.readFileSync(path.join(__dirname, '../data/template/doc.docx'), 'binary');
      var zip = new JSZip(content);
      var doc = new Docxtemplater();
      var opts = {
        centered: false,
        getImage: function(tagValue, tagName) {
          console.log(__dirname);
          return fs.readFileSync(path.join(__dirname, '../data/' + tagValue));
        },
        getSize: function(img, tagValue, tagName) {
          return [150, 150];
        }
      }
      doc.attachModule(new ImageModule(opts))
      doc.loadZip(zip);
      doc.setData({
        name1: "内容已被替换1",
        name2: "内容已被替换2",
        value1: "新的值1",
        value2: "新的值2",
        image: "image1.png"
      });
    
      try {
        /*
         render the document (replace all occurences of {first_name} by John, {last_name} by Doe, ...)
        */
        doc.render();
      } catch (error) {
        var err = {
          message: error.message,
          name: error.name,
          stack: error.stack,
          properties: error.properties,
        }
        console.log(JSON.stringify(err));
        /* 
        The error thrown here contains additional information when logged with JSON.stringify (it contains a property object).
        */
        throw error;
      }
    
      var buf = doc.getZip().generate({ type: 'nodebuffer' });
      /* buf is a nodejs buffer, you can either write it to a file or do anything else with it.*/
      fs.writeFileSync(path.join(__dirname, '../data/out/doc.docx'), buf);

    2,模板格式

    其中,模板文件格式为:

    //文本替换模板
    {name1}--------------{value1} {name2}--------------{value2} //图片替换模板 {%image}

     数据结构

  • 相关阅读:
    Big Data 應用:第二季(4~6月)台湾地区Game APP 变动分布趋势图
    大数据应用:五大地区喜新厌旧游戏APP类别之比较与分析
    Big Data應用:以"玩家意見"之數據分析來探討何謂"健康型線上遊戲"(上)
    Example:PanGu分詞系統-批次匯入新詞
    C#数据类型02--结构
    C#数据类型01--数组
    C#基础知识点
    陌生Layout属性
    LinearLayout(线性布局)
    Android--入门常识
  • 原文地址:https://www.cnblogs.com/vichang/p/10416449.html
Copyright © 2020-2023  润新知