将 Word 文档转换为 Markdown:完整指南
使用 pandoc、python 或在线工具转换为 MD
将 Word 文档转换为 Markdown 格式是技术作家、开发人员和内容创作者在将内容迁移到支持 Markdown 的平台(如 GitHub、GitLab、静态站点生成器如 Hugo)时非常常见的任务。
本指南涵盖了多种方法和工具,以有效完成此转换。
为什么要将 Word 转换为 Markdown?
Markdown 相比 Word 文档具有以下优势:
- 便于版本控制:纯文本格式与 Git 配合良好
- 平台独立:无需特殊软件即可在任何系统上阅读
- 面向未来:简单的文本格式不会过时
- 适合网页使用:易于转换为 HTML 用于网站和博客
- 轻量级:文件大小显著更小
- 便于自动化:易于通过程序处理
Pandoc 保留的内容:
- 标题(转换为
#
、##
、###
等) - 加粗和斜体格式
- 列表(项目符号和编号)
- 链接和引用
- 表格(转换为 Markdown 表格或 HTML)
- 代码块和内联代码
- 图片(使用
--extract-media
选项) - 脚注
方法 1:使用 Pandoc(推荐)
Pandoc 是一个通用的文档转换器,擅长在不同标记格式之间进行转换。它是将 Word 转换为 Markdown 的最可靠工具。
安装 Pandoc
在 Ubuntu/Debian 上:
sudo apt update
sudo apt install pandoc
在 macOS 上:
# 使用 Homebrew
brew install pandoc
# 或从官方网站下载
# https://pandoc.org/installing.html
在 Windows 上:
# 使用 Chocolatey
choco install pandoc
# 或从以下地址下载安装程序:
# https://github.com/jgm/pandoc/releases
验证安装:
pandoc --version
使用 Pandoc 进行转换
对于 DOCX 文件(现代 Word 格式):
pandoc document.docx -o document.md
对于旧版 DOC 文件:
Pandoc 无法直接读取 .doc
文件。您需要先使用 LibreOffice 将其转换为 .docx
:
# 首先将 DOC 转换为 DOCX
libreoffice --headless --convert-to docx document.doc
# 然后将 DOCX 转换为 Markdown
pandoc document.docx -o document.md
高级 Pandoc 选项:
# 使用特定的 Markdown 变体进行转换
pandoc document.docx -t gfm -o document.md # GitHub Flavored Markdown
# 提取图片到文件夹
pandoc document.docx --extract-media=./images -o document.md
# 保留更多格式
pandoc document.docx -t markdown+pipe_tables+raw_html -o document.md
# 使用自定义模板进行转换
pandoc document.docx --template=custom.template -o document.md
方法 2:使用 LibreOffice + Pandoc(适用于 DOC 文件)
在处理旧版 .doc
文件时,这种两步流程效果最佳:
安装 LibreOffice
在 Ubuntu/Debian 上:
sudo apt update
sudo apt install libreoffice
在 macOS 上:
brew install --cask libreoffice
在 Windows 上: 从 LibreOffice 官方网站 下载
转换过程:
# 第一步:将 DOC 转换为 DOCX
libreoffice --headless --convert-to docx document.doc
# 第二步:使用 Pandoc 将 DOCX 转换为 Markdown
pandoc document.docx -o document.md
# 清理中间文件(可选)
rm document.docx
使用 pandoc 的批量转换脚本:
创建一个脚本以转换多个文件:
#!/bin/bash
# convert-docs.sh
for file in *.doc; do
if [ -f "$file" ]; then
echo "正在转换 $file..."
# 将 DOC 转换为 DOCX
libreoffice --headless --convert-to docx "$file"
# 获取不带扩展名的文件名
basename=$(basename "$file" .doc)
# 将 DOCX 转换为 Markdown
pandoc "${basename}.docx" -o "${basename}.md"
# 清理中间 DOCX 文件
rm "${basename}.docx"
echo "✓ 已创建 ${basename}.md"
fi
done
使其可执行并运行:
chmod +x convert-docs.sh
./convert-docs.sh
方法 3:使用在线转换器(快速且简单)
对于偶尔的转换,使用在线工具会很便捷:
流行的在线转换器:
- Pandoc Try:https://pandoc.org/try/
- Word to Markdown Converter:https://word2md.com/
- Dillinger:https://dillinger.io/(具有导入功能)
优缺点:
- 优点:无需安装,可在任何设备上使用
- 缺点:隐私问题,文件大小限制,对输出控制较少
方法 4:使用 Word 内置导出(有限)
现代版本的 Microsoft Word 可以导出为基本的 Markdown:
- 在 Word 中打开文档
- 转到 文件 → 导出 → 更改文件类型
- 选择 网页页面,筛选后的 (*.html)
- 使用 Pandoc 等 HTML 到 Markdown 转换器:
pandoc document.html -o document.md
注意:与直接 DOCX 转换相比,此方法通常会产生较差的结果。
方法 5:编程解决方案
使用 Python 和 python-docx 与 markdownify:
#!/usr/bin/env python3
import sys
from docx import Document
from markdownify import markdownify
def docx_to_markdown(docx_path, md_path):
# 读取 docx 文件
doc = Document(docx_path)
# 提取文本(基本转换)
full_text = []
for paragraph in doc.paragraphs:
full_text.append(paragraph.text)
# 转换为 markdown(基本)
markdown_content = '\n\n'.join(full_text)
# 写入文件
with open(md_path, 'w', encoding='utf-8') as f:
f.write(markdown_content)
if __name__ == "__main__":
if len(sys.argv) != 3:
print("用法:python docx_to_md.py input.docx output.md")
sys.exit(1)
docx_to_markdown(sys.argv[1], sys.argv[2])
print(f"已将 {sys.argv[1]} 转换为 {sys.argv[2]}")
安装依赖项:
pip install python-docx markdownify
注意:这是一个基本实现。对于复杂文档,Pandoc 会产生更好的结果。
处理常见问题
1. 复杂表格
# 使用管道表格格式以获得更好的兼容性
pandoc document.docx -t markdown+pipe_tables -o document.md
2. 图片未转换
# 将图片提取到单独的文件夹
pandoc document.docx --extract-media=./images -o document.md
3. 格式丢失
# 保留更多 HTML 以处理复杂格式
pandoc document.docx -t markdown+raw_html -o document.md
4. 字符编码问题
# 指定 UTF-8 编码
pandoc document.docx -t markdown -o document.md --from=docx --to=markdown
最佳实践
1. 转换前的准备
- 转换前清理 Word 文档
- 使用一致的标题样式(标题 1、标题 2 等)
- 避免转换为 Markdown 时难以处理的复杂格式
- 使用 Word 内置的列表格式,而不是手动添加项目符号
2. 转换后的清理
- 检查输出中的格式问题
- 如有必要,修复表格格式
- 调整图片路径和替代文本
- 清理多余的换行或间距问题
3. 自动化技巧
# 为常用转换创建别名
echo 'alias doc2md="pandoc --from=docx --to=markdown"' >> ~/.bashrc
# 批量转换函数
doc2md_batch() {
for file in *.docx; do
pandoc "$file" -o "${file%.docx}.md"
done
}
方法比较
方法 | 优点 | 缺点 | 最适合 |
---|---|---|---|
Pandoc | 转换质量优秀,选项众多 | 需要安装 | 常规转换,复杂文档 |
LibreOffice + Pandoc | 可处理 DOC 文件 | 两步流程 | 旧版 DOC 文件 |
在线转换器 | 无需安装 | 隐私问题,功能有限 | 快速一次性转换 |
Word 导出 | 内置功能 | 输出质量差 | 仅适用于简单文档 |
编程 | 可定制 | 需要编程 | 自动化工作流 |
小结
对于大多数用户,Pandoc 是推荐的解决方案,用于将 Word 文档转换为 Markdown。它在质量、功能和可靠性之间提供了最佳平衡。对于旧版 .doc
文件,LibreOffice + Pandoc 的组合效果非常出色。
成功转换的关键是:
- 使用一致的格式准备 Word 文档
- 选择适合您需求的工具
- 检查并清理输出
- 如果进行常规转换,自动化流程
使用这些工具和技巧,您可以高效地将 Word 文档转换为 Markdown 格式,同时保留大部分原始格式和结构。
快速参考命令
# 基本转换(DOCX 到 Markdown)
pandoc document.docx -o document.md
# DOC 到 Markdown(两步)
libreoffice --headless --convert-to docx document.doc
pandoc document.docx -o document.md
# GitHub Flavored Markdown
pandoc document.docx -t gfm -o document.md
# 提取图片
pandoc document.docx --extract-media=./images -o document.md
# 批量转换所有 DOCX 文件
for file in *.docx; do pandoc "$file" -o "${file%.docx}.md"; done