Go 语言实现的 Markdown 转 DOCX 工具,支持流程图、图片、表格、公式等丰富内容,专为中文排版优化。
- 🎯 完整 Markdown 支持:标题 (1-9 级)、列表、表格、代码块、引用等
- 🔢 智能自动编号:将 Markdown 编号标题转换为 Word 可编辑的自动编号
- 📊 Mermaid 流程图:使用 chromedp 离线渲染,无需外部工具
- 🧮 数学公式:MathJax 渲染为高清图片,智能尺寸适配
- 🖼️ 智能图片处理:支持本地/网络/Base64 图片,自动格式检测
- 🔗 原生超链接:生成可点击的 Word 超链接
- 🎨 灵活样式配置:通过 YAML 文件自定义字体、字号、行距、缩进
- 📝 中文排版优化:默认宋体正文、黑体标题,支持首行缩进
- 🖥️ 图形界面版本:提供现代化的 GUI 界面,支持 Windows 和 macOS
- 🚀 开箱即用:配置内嵌于二进制,单文件即可运行
git clone https://github.com/GYJ99/md2word.git
cd md2word
# 同时编译当前平台的 CLI 和 GUI,输出到 dist-cli/ 和 dist-gui/
./scripts/build.sh产物:
- CLI:
dist-cli/md2word-<os>-<arch>[.exe](静态二进制,约 15M) - GUI:
dist-gui/md2word-gui-<os>-<arch>[.exe](约 30M,需 CGO) - 分发包:同目录下自动生成
.tar.gz(Unix)或.zip(Windows)
# CLI(静态编译,支持交叉编译)
CGO_ENABLED=0 go build -o md2word ./cmd/md2word
# GUI(需要 CGO,必须在目标平台编译)
go build -o md2word-gui ./cmd/md2word-gui
# 安装到 $GOPATH/bin
go install ./cmd/md2word
go install ./cmd/md2word-gui- 启动应用:双击
md2word-gui(macOS/Linux)或md2word-gui.exe(Windows) - 选择文件:点击"浏览"按钮选择 Markdown 文件
- 设置输出:选择输出位置(可选,点击"自动"会填入默认值)
- 选择配置:选择配置文件或使用默认配置
- 开始转换:点击"🚀 开始转换"按钮(或按 Ctrl+S)
- 查看结果:转换完成后会显示成功提示
- 快捷键:
Ctrl+O打开文件 /Ctrl+S开始转换
./dist-cli/md2word-<os>-<arch> -i input.md -o output.docx./dist-cli/md2word-<os>-<arch> -i input.md -o output.docx -c config.yaml| 参数 | 说明 |
|---|---|
-i, --input |
输入 Markdown 文件路径(必需) |
-o, --output |
输出 DOCX 文件路径(可选,默认与输入同名) |
-c, --config |
配置文件路径(可选) |
CLI 与 GUI 共用同一逻辑,按以下顺序查找配置:
- 命令行/界面参数
-c config.yaml - 当前目录
./config.yaml - 可执行文件所在目录
$EXE_DIR/config.yaml - 内置默认 编译时嵌入的配置
配置文件使用 YAML 格式,支持丰富的样式定制:
styles:
body:
font: "宋体"
size: 10.5 # 五号字
lineHeight: 360 # 1.5倍行距 (twips, 240=单倍)
firstLineIndent: 420 # 首行缩进 (twips, 约2字符)
heading1:
font: "黑体"
size: 16 # 三号字
bold: true
# heading2 ~ heading9 同结构
heading7: # goldmark 默认只支持 1-6 级
font: "宋体 (标题)" # 本项目扩展为 1-9 级
size: 12
bold: true
code:
font: "Consolas"
size: 8
background: "#f5f5f5"
table:
font: "宋体"
size: 10.5
borders: true
headerBold: true
mermaid:
enabled: true
theme: "default"
math:
enabled: true
render: "image"
images:
maxWidth: 600
downloadTimeout: 30- 字号 (size):pt(磅)
- 间距/行高/缩进:twips(1/20 磅)
240twips = 12pt = 单倍行距360twips = 18pt = 1.5倍行距420twips ≈ 2字符首行缩进(基于五号字)
| 元素 | 字体 | 字号 | 说明 |
|---|---|---|---|
| 正文 | 宋体 | 10.5pt (五号) | 1.5倍行距,首行缩进2字符 |
| 一级标题 | 黑体 | 16pt (三号) | 加粗 |
| 二级标题 | 黑体 | 15pt (小三) | 加粗 |
| 三级标题 | 黑体 | 15pt (小三) | 加粗 |
| 四-九级标题 | 黑体 | 14pt (四号) | 加粗 |
- Go 1.21+:用于编译构建
- Chrome/Chromium 浏览器:用于 Mermaid 流程图渲染
# macOS 安装 Chrome
brew install --cask google-chromeGUI 版本仅支持在目标平台编译(Fyne 依赖 OpenGL 和平台特定的 C 库)。
md2word/
├── cmd/
│ ├── md2word/ # CLI 入口
│ └── md2word-gui/ # GUI 入口 (Fyne)
├── internal/
│ ├── config/ # 配置管理(含内嵌 default.yaml)
│ │ ├── config.go
│ │ └── default.yaml
│ ├── converter/ # 核心转换器
│ │ ├── converter.go
│ │ ├── code_native.go
│ │ ├── code_renderer.go
│ │ ├── chrome_finder.go
│ │ ├── math.go
│ │ ├── mermaid.go
│ │ └── mermaid_chromedp.go
│ ├── docx/ # DOCX 生成
│ │ ├── document.go
│ │ ├── numbering.go
│ │ ├── paragraph.go
│ │ ├── styles.go
│ │ └── table.go
│ └── parser/ # Markdown 解析
│ ├── markdown.go
│ └── deep_atx_heading.go # 扩展支持 7-9 级标题
├── scripts/
│ └── build.sh # 一键打包 CLI + GUI
├── .github/workflows/ # CI/CD
├── assets/ # 应用资源
│ └── icon.png
├── config.yaml # 默认配置示例
├── config_anke.yaml # 其它场景示例
├── config_yunnan.yaml
├── FyneApp.toml
└── README.md
./scripts/build.sh
# 或指定版本号
VERSION=1.0.1 ./scripts/build.shgo test ./...GUI 必须在目标平台本地编译,CLI 支持交叉编译:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o md2word-linux ./cmd/md2word
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o md2word.exe ./cmd/md2wordmd2word 支持将 Markdown 中的编号标题转换为 Word 的自动编号标题,实现真正可编辑的编号系统。
## **2.1 主要章节**
### **2.1.1 子章节**
#### **2.1.1.1 详细内容**- 智能分组:相同顶级编号的标题使用同一编号序列
- 例如:2.1、2.1.1、2.2 属于"2"组
- 而 3.1、3.1.1 属于"3"组
- 跳跃编号:支持任意起始编号(如直接从 5.1 开始)
- 自动编号:在 Word 中显示为可编辑的自动编号,支持插入和重新排序
- 文本分离:自动移除原始编号,只保留标题文本
| Markdown 输入 | Word 输出 |
|---|---|
## **2.1 系统设计** |
2.1 系统设计(自动编号) |
### **2.1.1 架构说明** |
2.1.1 架构说明(自动编号) |
## **3.1 测试计划** |
3.1 测试计划(新编号序列) |
- [✅] 标题 (1-9 级)
- [✅] 自动编号标题 (如
## **2.1 标题**) - [✅] 段落和文本格式 (加粗、斜体、删除线)
- [✅] 有序/无序列表
- [✅] 表格 (GFM 格式)
- [✅] 代码块 (语法高亮)
- [✅] 行内代码
- [✅] 超链接
- [✅] 图片 (本地/网络/Base64)
- [✅] 引用块
- [✅] 分隔线
- [✅] Mermaid 流程图
- [✅] 数学公式 (
$...$ ,$$...$$ )
MIT License