记react+electron项目中根据world模板生成对应模板文件

1. 功能实现所依赖的库,同时在electron环境下依赖fs path两大模块

npm install --save docxtemplater pizzip
详细官网文档参考:https://docxtemplater.com/docs/get-started-node/

2. 详细实现如下(直接贴完成代码):

const { dialog } = require('electron');
const path = require('path');
const fs = require('fs');
const Docxtemplater = require('docxtemplater');
const PizZip = require('pizzip');

 ipcMain.handle('save-docx-file', (_, data) => {
    return new Promise((resolve) => {
      console.log(data);
      // #start 获取模板文件, 当前代码亦可使用jszip-utils库进行读取
      let filePath = path.join(process.cwd(),'/resources/config/templete.docx');
      if (process.env.NODE_ENV === 'development') {
        filePath = path.join(__dirname, './config/templete.docx');
      }
      const content = fs.readFileSync(filePath, 'binary');
      // #end
      
      const zip = new PizZip(content);
      const doc = new Docxtemplater(zip, {
        paragraphLoop: true,
        linebreaks: true,
      });
      doc.setData({
      });
      // 设置模板中变量的值
      doc.setData({
        index: 2,
        processCode: 'Process0555555555555555555',
        p1_1: 9999.66,
        p1_2: true,
        userId: '9d1a7811',
        uploadTime: '2023-08-03T16:31:47+08:00',
        remark: 'BBB',
        first_name: '测试模板',
        last_name: '测试模板',
      });

      doc.render(); // 同一个doc下只能执行一次

      const buf = doc.getZip().generate({
        type: 'nodebuffer',
        compression: 'DEFLATE',
      });
      // 使用electron 获取用户所选择的保存目录路径,具体文档参考官网文档
      [selectedPath] = dialog.showOpenDialogSync(mainWindow, {
        title: '请选择保存目录',
        properties: ['openDirectory', 'createDirectory'], // 允许选择单个文件夹目录
      });
      if (!selectedPath) {
        {
          return resolve([{ msg: '操作失败!' }, null]);
        }
      }
      const targetPath = path.join(selectedPath, 'success.docx');
      fs.writeFile(targetPath, buf, (err) => {
        if (err) {
          return resolve([{ msg: '操作失败!' }, null]);
        }
        return resolve([null, targetPath]);
      });
    });
  });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值