页面转word的那些事

背景

有些时候需要将页面内容或者是页面的数据通过word进行下载,以方便客户进行二次编辑,而不是直接导出图片或者是pdf。

想在页面端点击下载成word,那必然需要服务端来进行读写文件,无论是你后端编辑好的内容流,还是前端自身根据数据进行渲染。而现代浏览器恰好也是支持的,我们下面就介绍几个方式。

实现方案

第一种,使用docxtemplater

常规使用,就是在你本地创建一个word模版,然后通过官方约定的数据格式要求,用数据进行填充。那如果,我是想内容模块能够互换位置,内容完全的定制化,那就不太好办了,也只能用于一些简单的场景。复杂的模块都是收费的~

第二种,则是虚拟构建一套html文本,然后通过插件html-word转化成word进行下载,这里就可以达成我们想要的效果,只要你会html+css+js基本上问题不大

可以通过htmlDocx插件转化为blob数据,通过额外的配置项可以配置word的页面边距,基本上就是可以的

javascript 复制代码
import htmlDocx from './html-word';
import saveAs from 'file-saver';


 const content = myRef.current.innerHTML;
 const converted = htmlDocx.asBlob(content, {
   margins: { left: 1082, right: 1082 },
 });
 await saveAs(converted, datas.name);

注意事项:

  • 如果你的页面有echarts或者canvas类的,需要转化为图片,获取全局echarts dom节点,new一个image的dom节点,插在echarts同级dom(各大框架语法不同,下方为借鉴)
javascript 复制代码
 var img = new Image(); //重头戏在这 图标的大小
chartRefs.map((ref) => {
  let chart = ref.getEchartsInstance();
  setTimeout(function () {// 防止渲染过程中,未渲染完成就绘制成图片
    var img = new Image();
    img.src = chart.getDataURL({
      type: 'png',
      backgroundColor: '#fff',
    });
    const option = chart.getOption();
    img.width = 660
    img.height = 400
    ref.ele.insertAdjacentElement('beforebegin', img);
    setnum++;
    if (setnum == chartRefs.length) {
      setnum = 0;
      callback?.();
    }
  }, 800);
});
  • css样式需要使用style内联样式,以防止获取dom节点转化word不生效;
  • 像素单位尽可能使用pt为单位,不要使用px,以防止office、wps显示不同的兼容问题;
  • 图片的宽高等属性需要使用 dom节点原生的width、height,否则不生效;
  • 最好不要使用第三方的UI框架,以防止不生效;
  • 首行锁进,不能使用文本的px进行计算,比如字体16px,text-indent: 32px,就是不可行的,应该使用2em;
  • 行距,默认情况下想设置比如1.5倍行距,只能使用百分比150%,而其他的设置lineHeight为1.5、1.5em,px都会被认为最小值xx磅
相关推荐
asdzx6718 小时前
Java 实战:基于 Spire.Doc 高效提取 Word 文档文本与图片
java·c#·word
VBAMatrix18 小时前
表格导航!实现Word合并附注与多个Excel的数据同步
word·excel·审计报告·审计·会计师事务所·报告工具
DS随心转小程序2 天前
文心文字怎么转为 word?告别繁琐排版操作,AI 导出鸭一站式完成文档转换工作
人工智能·word·豆包·deepseek·ai导出鸭
AI导出鸭3 天前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
zyplayer-doc3 天前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word
其美杰布-富贵-李4 天前
第 8 篇:Three.js 材质系统
javascript·three.js·js
zyplayer-doc4 天前
企业文档改错或误删后怎么办:zyplayer-doc编辑历史、版本回滚和回收站怎么用
大数据·开发语言·javascript·数据库·pdf·word
Ai-_Man5 天前
豆包智能体内容批量导出:哪些该存、存成什么、怎么存v
人工智能·ai·小程序·word
weixin_416660075 天前
解决方案:DeepSeek不支持直接导出Word
word
2601_965912916 天前
PDF转Word工具深度横评:2026年国内免费方案技术对比
pdf·word