当前位置: 首页 > news >正文

vue使用html-docx基于TinyMCE 导出Word 文档

背景

最近有个需求基于TinyMCE富文本插件导出word,导出并保持富文本样式不变,
前端实现word导出的方式主要有两种:

  • docx:通过 API 构建 Word 文档(控制精细,但代码量大)。
  • html-docx:直接把 HTML 转换成Word(简单快捷,适合文章导出)。
    基于快速开发,于是选择了html-docx

实现思路

1.从 TinyMCE 获取 HTML 内容(如果是 Markdown,可以先转成 HTML)。
2.使用 html-docx 把 HTML 转换为 Word 的 Blob 对象。
3.动态创建 a标签,触发浏览器下载。

注意事项

直接在项目中通过 import htmlDocx from ‘html-docx-js’ 可能会报错(尤其是在 Vue / Vite / TypeScript 环境下),所以我直接将 html-docx.js 放在项目的 public 目录下,然后在代码中通过全局对象引用:

// 假设你把文件放在 public/lib/html-docx.js
// 在 main.ts 或组件中直接使用 window.htmlDocx
const blob = window.htmlDocx.asBlob(html, { orientation: 'portrait' });

实现代码

const exportToDocx = async () => {if (!queryParams.value.wTitle) {return proxy?.$modal.msgError('导出失败:请输入文章标题');}// 将 Markdown 转换为 HTML(如果 TinyMCE 直接返回 HTML,就不需要这一步)const textHtml = marked(docContent.value);// 拼接完整 HTML,定义页面样式const html = `<html><head><meta charset="UTF-8"><style>@page {size: A4;margin-top: 3.7cm;margin-bottom: 3.5cm;margin-left: 2.8cm;margin-right: 2.6cm;}body {font-size: 16pt;line-height: 28pt;       /* 固定 28 磅行距 */font-family: FangSong, serif;text-indent: 2em;        /* 首行缩进 2 字 */}p {margin: 0;               /* 避免额外段间距 */padding: 0;}</style></head><body>${textHtml}</body></html>`;// 使用 html-docx 转换成 Word Blobconst blob = window.htmlDocx.asBlob(html, { orientation: 'portrait' });// 触发浏览器下载const link = document.createElement('a');link.href = URL.createObjectURL(blob);link.download = `${queryParams.value.wTitle}.docx`;document.body.appendChild(link);link.click();document.body.removeChild(link);
};

附件:html-docx.js源码下载

html-docx.js

http://www.dtcms.com/a/398572.html

相关文章:

  • 衡水做网站的东莞百度网站推广
  • 五十三、bean的管理-bean的获取、bean的作用域、第三方bean
  • 开封网站开发公司百度福州分公司
  • VGG改进(10):将Dynamic Conv Attention引入VGG16完整指南
  • sql题目
  • 数字化转型的核心引擎:解读华为“业务重构”三层设计模型
  • 【算法】【优选算法】BFS 解决边权相同最短路问题
  • Socket基础
  • 深入了解linux网络—— 网络编程基础
  • 焦作做网站哪家好提供微网站制作电话
  • 【嘉力创】天线阻抗设计
  • xlsx-js-style 操作 Excel 文件样式
  • 岛屿数量(广搜)
  • 美食网站要怎么做一个网站交互怎么做的
  • AppInventor2 使用 SQLite(二)导入外部库文件
  • AppGallery Connect(Harmony0S 5及以上)--公开测试流程
  • 深入解析:使用递归计算整数幂的C语言实现
  • 虚幻引擎入门教程开关门
  • 设计模式-组合模式详解
  • 什么是B域?
  • Android 用java程序模拟binder buffer的分配释放以及buffer的向前和向后合并
  • 专门做护肤品网站浙江立鹏建设有限公司网站
  • 电商会学着做网站呢设计师接单渠道
  • Postman 学习笔记 II:测试、断言与变量管理
  • electron设置默认应用程序
  • Flink 初体验10 分钟完成下载、安装、本地集群启动与示例作业运行
  • toLua[二] Examples 01_HelloWorld分析
  • asp源码打开网站网站页面数量
  • 安卓手机termux安装ubuntu被kill进程解决
  • java后端工程师进修ing(研一版‖day48)