将 Word 文档转换为 Markdown:完整指南

使用 pandoc、python 或在线工具转换为 MD

目录

将 Word 文档转换为 Markdown 格式是技术作家、开发人员和内容创作者在将内容迁移到支持 Markdown 的平台(如 GitHub、GitLab、静态站点生成器如 Hugo)时非常常见的任务。

本指南涵盖了多种方法和工具,以有效完成此转换。

word to markdown on the grinder

为什么要将 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:

  1. 在 Word 中打开文档
  2. 转到 文件导出更改文件类型
  3. 选择 网页页面,筛选后的 (*.html)
  4. 使用 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 的组合效果非常出色。

成功转换的关键是:

  1. 使用一致的格式准备 Word 文档
  2. 选择适合您需求的工具
  3. 检查并清理输出
  4. 如果进行常规转换,自动化流程

使用这些工具和技巧,您可以高效地将 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

有用的链接