纯前端导出 word 应选 html-docx-js(ie/旧 electron 才支持 execcommand);html-to-docx 适合服务端但需严格配置;复杂样式应改用 puppeteer+pdf2docx 或 libreoffice 转换。

直接用 document.execCommand('saveAs') 导出 Word 是行不通的——这个 API 在 Chrome 85+、Edge 89+、Firefox 中已被彻底禁用,调用后静默失败,控制台通常不报错,只在 IE 或极老 Electron 壳里能用。别浪费时间试它。
html-docx-js:前端最轻量靠谱的选择
它纯前端运行,把 HTML 字符串转成 .docx 的 Blob,不依赖后端,中文支持靠 encoding: 'UTF-8' 配置项,否则 Word 里全是乱码。
关键实操点:
- 必须传入完整 HTML 字符串,不是 DOM 节点;用
element.outerHTML或new XMLSerializer().serializeToString(document.documentElement)提取 - 图片只认
data:image/xxx;base64,...,外链(如https://...)会被忽略;需提前fetch下来转 base64 - 复杂布局(
display: flex、grid、position: absolute)会被 Word 忽略,只保留语义结构和内联样式 -
margin: 10px这种简写会被整个跳过,得写成margin-top: 10px; margin-bottom: 10px;才生效
html-to-docx:可控但参数敏感的 Node.js 方案
它适合服务端或 Electron 环境,生成标准 Office Open XML,但默认配置几乎必然翻车:表格错位、图片空白、中文换行异常是高频问题。
必须显式开启的关键参数:
-
parseHtmlStyles: true—— 否则所有style="..."内联样式被无视 -
table: { styleMappings: true }—— 否则rowspan/colspan全失效,<th> 不加粗无背景 <li>外部 CSS 或 <code><style></style>标签不处理,得提前用工具(如critters)内联化 - 远程图片(
src="https://...")不会自动加载,必须手动下载并注入 base64;ignoreImageErrors: true只让转换不崩,图片仍是空的 - 用
puppeteer或playwright启动无头浏览器,加载 HTML,调用page.pdf() - 再用
pdf2docx转一次 —— 虽非 100% 精确,但保真度远高于纯解析方案 - 若只是简单页面且有 LibreOffice 环境,
libreoffice --headless --convert-to docx input.html命令行转换最快最稳
别绕远路:什么时候该放弃纯 JS 方案?
当你的 HTML 含大量浮动布局、媒体查询、CSS 动画、Web Font 加载逻辑,或者需要精确还原打印样式时,html-docx-js 和 html-to-docx 都会开始“选择性失明”。
这时更稳的路径是:
真正容易被忽略的点是:Word 对 HTML 的解析逻辑极其保守,它不是“渲染引擎”,而是“语义映射器”。你写的每一条 CSS,都得先问一句:“Word 认不认识这个属性?”——不是库不行,是 Word 本身就不支持。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











