Mammoth.js 对比 Pandoc WASM:谁的 Word 转 Markdown 更好?
Word 转 Markdown 有两条路线:Mammoth.js 是轻量库,把 docx 变成干净的语义 HTML;Pandoc 是转换的事实标准,编译成 WebAssembly 后就是桌面同款引擎。
本文先看两条管线如何工作,再逐维度对比决定质量的指标:表格、脚注、数学、图片、列表与修订。两者都完全本地运行,争的不是隐私,而是保真度与体积。
两条管线,两种哲学
Mammoth 读取 docx 内部的 OOXML,只求语义内容,不求外观。认识的样式映射成 HTML 元素,其余被判定为装饰的东西——颜色、字体、间距、文本框——一律丢弃。
Pandoc 用原生 reader 拆解 docx,不直接输出 HTML,先构建抽象语法树(AST):各 reader 产出同一种 AST,writer 消费它。同一棵树可产出 Markdown、HTML、reStructuredText、LaTeX。
Mammoth 的 style map
Mammoth 的扩展点 style map 是一组 Word 样式到 HTML 的映射规则,例如某样式的段落输出为 h1、某字符样式的加粗输出为 strong。不改代码就能适配自家模板。
代价是:style map 与支持范围之外的东西会直接消失。对备忘录和博客这是优点,输出干净;对带脚注与公式的重度报告,沉默就不是金了。
表格、脚注与数学
Mammoth 能把简单表格转成朴素 HTML,但嵌套表格不支持,合并单元格也很少存活。Pandoc 解析完整表格结构,每行每格都能存活;之后取决于 writer——Markdown 管道表格表达不了合并单元格,HTML writer 则能保留整表。
脚注类似:Mammoth 把注脚集中到文末并用链接指回;Pandoc 把脚注建成一等节点,Markdown 与 LaTeX 输出原生脚注。数学的分水岭最清晰——Mammoth 不转换 OMML 公式,Pandoc 能转 LaTeX 数学。
图片、列表与修订
图片两边都行。Mammoth 默认以 data URI 内联,也可换自定义处理器;Pandoc 把媒体提取成文件夹,或转 base64 得到单文件。日常列表两边都稳。
修订很微妙。Pandoc 有显式的 trackChanges 选项,accept、reject、all 三选一;Mammoth 没有修订模型,文本按全部接受后输出。若审阅依赖修订痕迹,只有一家给你选择权。
体积与交付
体积差距是保真度的代价。Mammoth 只有几百 KB;Pandoc 编译成 WebAssembly 约 58 MB,首次下载实打实。放进 Web Worker 后只付一次:本站把引擎缓存在 Cache API,此后转换 Network 面板为空,还能离线。
缓存改变了算术:一次下载、按浏览器缓存、之后像本地二进制,与每次会话重复传输是两回事。对天天转换的团队,这点成本远低于反复修复坏表格的时间。
输出广度与引用
Mammoth 输出 HTML 和 Markdown。Pandoc 的 writer 才是 AST 的价值:同一次解析可产出 reStructuredText 喂给 Sphinx,或经模板产出有样式的 docx。引用也能闭环——citeproc 配 .bib 与 .csl 解析引用键,Mammoth 无此能力。
广度也不止输出:Pandoc 还能读 odt、epub、LaTeX、Org 等格式,一个工具覆盖整条管线。Mammoth 是专注的 docx 专家,只是别指望它当枢纽。
怎么选
两者并非对手,而是两个问题的答案。若文档简单、包体预算紧、目标只有 HTML 或 Markdown,Mammoth 非常出色:小、快、可预测,配上调好的 style map 更是如此。
若源文件带脚注、公式、复杂表格或引用,或需要两种以上输出格式,Pandoc 是诚实的选择;WebAssembly 运行保留零上传隐私。本站正因此选了 pandoc wasm:保真度优先,下载一次永久缓存。拿最难的文档试试。