html-docx-js适合浏览器端快速导出,支持canvas转图但无页眉页脚;html-to-docx返回Buffer、支持高级排版配置但需手动处理样式和图片,二者均不依赖第三方服务器。
直接用 html-doc-js 或 html-to-docx 是最可控、可集成、不传文件到第三方的方案;在线转换器和 Word 打开再另存虽快,但样式错乱、表格边框丢失、中文排版崩坏是常态。
html-doc-js vs html-to-docx
两者都支持浏览器端导出,但行为差异明显:
html-doc-js 不生成 Buffer,直接触发下载,适合 Vue/React 项目内嵌调用;它把 CSS 转成行内 style,对 border-collapse、padding 等兼容较好,但不支持页眉页脚、分节符等 Word 高级特性html-to-docx 返回 Buffer,需配合 FileSaver.js 触发下载,支持 header/footer/pageNumber 等配置,但默认会忽略 style 标签里的规则,必须手动提取并注入canvas 图表,html-doc-js 的 toImg 参数能一键转图;html-to-docx 需自己先用 html2canvas 截图再替换 DOM不清理就导出,Word 里大概率出现空白块、重复文字、错位公式:
mjx-assistive-mml 元素(MathJax 辅助节点),用 document.querySelectorAll('mjx-assistive-mml').forEach(el => el.remove()) 干掉script 和 link 标签,它们不会被渲染,但可能干扰解析逻辑display: none 或 visibility: hidden 的容器,html-doc-js 默认仍会导出其子内容,得提前 remove()
Word 对 CSS 支持极弱,以下写法在网页看着正常,导出后基本失效:
立即学习“前端免费学习笔记(深入)”;
px 单位 → 改成 pt(例如 font-size: 12pt)--main-color)→ 必须预编译为具体值,html-doc-js 不解析 :root.report > table tr:nth-child(odd) → 改为直接给 tr 加 class,Word 只认行内 style
border-collapse: collapse 且每行每单元格加 border,否则 Word 里边框全消失常见错误信息是 “无法打开文件,因为内容有误” 或文字堆叠成一行:
),html-to-docx 会静默失败,建议用 DOMParser 预检:new DOMParser().parseFromString(htmlContent, 'text/html') 看是否抛异常htmlContent.replace(/[u2028u2029]/g, '')
真正麻烦的从来不是“能不能转”,而是“转完能不能直接交出去”。表格线断开、中文字体变成宋体五号、页边距归零——这些细节没在导出前压测过,交付时就会卡在业务方最后一关。