设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间08 现在时间08 缓存数据 世界上没有永恒的懦弱,也没有永恒的坚强,万事靠自己,但是一定要放下懦弱,活的有尊严,活出你的坚强,才真正的体现你的自信和力量,你的活才更有价值!

世界上没有永恒的懦弱,也没有永恒的坚强,万事靠自己,但是一定要放下懦弱,活的有尊严,活出你的坚强,才真正的体现你的自信和力量,你的活才更有价值!

查看: 872|回复: 0

vue使用docxtemplater导出word

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:16
  • 打卡月天数:0
  • 打卡总奖励:243
  • 最近打卡:2024-12-07 10:06:03
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
40
主题
32
精华
0
金钱
363
积分
84
注册时间
2023-8-13
最后登录
2025-5-31

发表于 2025-5-31 05:32:21 | 显示全部楼层 |阅读模式
docxtemplater

docxtemplater 是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容(表格、html、图像)。
npm 是安装 docxtemplater 最简单的方法
  1. npm install docxtemplater pizzip --save​
复制代码
  1. // 安装 docxtemplater
  2. npm install docxtemplater pizzip  --save
  3. // 安装 jszip-utils
  4. npm install jszip-utils --save
  5. // 安装 jszip
  6. npm install jszip --save
  7. // 安装 FileSaver
  8. npm install file-saver --save
  9. // 引入处理图片的插件1
  10. npm install docxtemplater-image-module-free --save
  11. // 引入处理图片的插件2
  12. npm install angular-expressions --save
复制代码
vue使用docxtemplater导出word


安装
  1. // 安装 docxtemplater
  2. npm install docxtemplater pizzip  --save
  3. // 安装 jszip-utils
  4. npm install jszip-utils --save
  5. // 安装 jszip
  6. npm install jszip --save
  7. // 安装 FileSaver
  8. npm install file-saver --save
  9. // 引入处理图片的插件1
  10. npm install docxtemplater-image-module-free --save
  11. // 引入处理图片的插件2
  12. npm install angular-expressions --save
复制代码
准备word模板放至项目public文件夹下

常用语法

1.单个变量使用
{name}
2.数组对象循环
{#list}  {name} {age} {/list}
3.图片(base64/url)
{%imgurl}

封装导出方法
  1. import docxtemplater from 'docxtemplater';
  2.     import PizZip from 'pizzip';
  3.     import JSZipUtils from 'jszip-utils';
  4.     import { saveAs } from 'file-saver';
  5.     import ImageModule from 'docxtemplater-image-module-free';


  6.     //将对象中值为null和undefined的进行替换
  7.     //参数1 需要处理的对象 参数2 替换后的值
  8.     const replaceNull = (someObj, replaceValue = "***") => {
  9.         const replacer = (key, value) =>
  10.         String(value) === "null" || String(value) === "undefined" ?         replaceValue : value;
  11.         return JSON.parse(JSON.stringify(someObj, replacer));
  12.     }

  13.     /**
  14.      4. 导出docx
  15.      5. @param { String } tempDocxPath 模板文件路径
  16.      6. @param { Object } data 文件中传入的数据
  17.      7. @param { String } fileName 导出文件名称
  18.     */
  19.     export const exportWord = (tempDocxPath, data, fileName) => {
  20.         //过滤空值
  21.            data = replaceNull(data, '')
  22.         function base64DataURLToArrayBuffer(dataURL) {
  23.             const base64Regex =     /^data:image\/(png|jpg|jpeg|svg|svg\+xml);base64,/;
  24.             if (!base64Regex.test(dataURL)) {
  25.                 return false;
  26.             }
  27.         console.log(dataURL);
  28.         const stringBase64 = dataURL.replace(base64Regex, "");
  29.         let binaryString;
  30.         if (typeof window !== "undefined") {
  31.             binaryString = window.atob(stringBase64);
  32.         } else {
  33.             binaryString = new Buffer(stringBase64, "base64").toString("binary");
  34.         }
  35.         const len = binaryString.length;
  36.         const bytes = new Uint8Array(len);
  37.         for (let i = 0; i < len; i++) {
  38.             const ascii = binaryString.charCodeAt(i);
  39.             bytes[i] = ascii;
  40.         }
  41.         return bytes.buffer;
  42.     }
  43.     // 读取并获得模板文件的二进制内容
  44.     JSZipUtils.getBinaryContent(tempDocxPath, (error, content) => {
  45.         if (error) {
  46.             throw error;
  47.         }
  48.         const imageOptions = {
  49.             getImage(tag) {
  50.                 return base64DataURLToArrayBuffer(tag);
  51.             },
  52.             getSize() {
  53.                 return [100, 100];
  54.             },
  55.         };
  56.         let zip = new PizZip(content);
  57.         let doc = new docxtemplater();
  58.         doc.loadZip(zip);
  59.         doc.attachModule(new ImageModule(imageOptions));
  60.         doc.setData(data);
  61.         
  62.           try {
  63.               doc.render();
  64.           } catch (error) {
  65.               let e = {
  66.                   message: error.message,
  67.                   name: error.name,
  68.                   stack: error.stack,
  69.                   properties: error.properties,
  70.               };
  71.               console.log({
  72.                   error: e
  73.               });
  74.               throw error;
  75.           }
  76.           let out = doc.getZip().generate({
  77.               type: "blob",
  78.               mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  79.           }); //Output the document using Data-URI
  80.           saveAs(out, fileName);
  81.       });
  82.   };
复制代码
封装方法使用
  1. import { exportWord } from '/@/utils/exportFile';

  2.     const handleExport = async (data: any) => {
  3.             exportWord('/wordTemplate/tzd.docx', data, '通知单.docx');
  4.     }
复制代码
到此这篇关于vue使用docxtemplater导出word的文章就介绍到这了,更多相关vue docxtemplater导出word内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表