Skill: mo-yuhua/pandoc-docx (version 1.0.0)

# pandoc-docx > 🔄 通过 pandoc 实现 Word (.docx) 与 Markdown 双向转换 --- ## 📖 概述 基于 pandoc 的文档格式转换工具，支持 Word (.docx) 与 Markdown 之间的双向转换。 **核心能力：** - ✅ 读取 Word (.docx) → Markdown - ✅ 写入 Word (.docx) ← Markdown - ✅ 格式转换 (.docx ↔ .md ↔ .pdf ↔ .txt ↔ .html) - ✅ 批量处理 - ✅ 图片提取 - ✅ 格式保留（标题、粗体、列表、表格、代码） **依赖：** pandoc (必需), libreoffice (可选，用于 .doc 支持) --- ## 🎯 触发条件 用户提到以下关键词时触发： | 关键词 | 示例 | |--------|------| | "读取 Word" | "读取这个 report.docx" | | "转为 Word" | "把这个 md 转为 word" | | "docx 转 md" | "docx 转 md" | | "创建 Word" | "创建一个 Word 文档" | | "修改 docx" | "修改这个合同.docx" | | "pandoc" | "用 pandoc 转换" | | 文件路径包含 .docx | "处理 ~/documents/report.docx" | --- ## 🛠️ 支持格式 ### 输入格式 | 格式 | 读取 | 写入 | 说明 | |------|------|------|------| | .docx | ✅ | ✅ | Word 2007+（主要支持） | | .doc | ⚠️ | ⚠️ | 需要 libreoffice | | .md | ✅ | ✅ | Markdown | | .txt | ✅ | ✅ | 纯文本 | | .pdf | ⚠️ | ❌ | 仅读取（需 pdftotext） | | .html | ✅ | ✅ | HTML | ### 输出格式 | 格式 | 支持 | 说明 | |------|------|------| | .docx | ✅ | Word 文档 | | .md | ✅ | Markdown | | .pdf | ✅ | PDF（需 texlive） | | .txt | ✅ | 纯文本 | | .html | ✅ | HTML | | .epub | ✅ | 电子书 | --- ## 🔄 核心流程 ### 1. 读取 Word 文档 ``` 用户请求：读取 ~/report.docx ↓ 检查文件格式 (.docx) ↓ 调用 scripts/doc-read.sh ↓ pandoc report.docx -t markdown ↓ 返回 Markdown 内容 ↓ AI 分析/总结/处理 ``` ### 2. 写入 Word 文档 ``` 用户请求：创建 Word 文档 ↓ AI 生成 Markdown 内容 ↓ 调用 scripts/doc-write.sh ↓ pandoc input.md -o output.docx ↓ 返回 Word 文件路径 ↓ 确认完成 ``` ### 3. 格式转换 ``` 用户请求：docx 转 md ↓ 检查源文件和目标格式 ↓ 调用 scripts/doc-convert.sh ↓ pandoc input.docx -o output.md ↓ 返回转换结果 ``` --- ## 📝 使用方式 ### 基础命令 ```bash # 读取文档 ./scripts/doc-read.sh <文件路径> [格式] # 写入文档 ./scripts/doc-write.sh <输出文件> <输入文件|-> [格式] # 格式转换 ./scripts/doc-convert.sh <输入文件> -o <输出文件> # 编辑文档 ./scripts/doc-edit.sh <文件> <操作> [内容] ``` ### 使用示例 ```bash # 读取 Word ./scripts/doc-read.sh ~/report.docx # 创建 Word echo "# 标题" | ./scripts/doc-write.sh ~/output.docx - # 格式转换 ./scripts/doc-convert.sh ~/input.docx -o ~/output.md # 提取图片 ./scripts/doc-convert.sh ~/input.docx -o ~/output.md --extract-media=./images # 批量转换 for f in *.docx; do ./scripts/doc-convert.sh "$f" -o "${f%.docx}.md"; done # 检查依赖 ./scripts/check-deps.sh ``` --- ## ⚠️ 依赖检查 ### 必需依赖 | 工具 | 检查命令 | 安装命令 (Linux) | 安装命令 (macOS) | |------|---------|-----------------|-----------------| | pandoc | `pandoc --version` | `sudo apt install pandoc` | `brew install pandoc` | ### 可选依赖 | 工具 | 用途 | 安装命令 (Linux) | 安装命令 (macOS) | |------|------|-----------------|-----------------| | libreoffice | .doc 支持 | `sudo apt install libreoffice` | `brew install --cask libreoffice` | | pdftotext | PDF 读取 | `sudo apt install poppler-utils` | `brew install poppler` | | texlive | PDF 生成 | `sudo apt install texlive` | `brew install --cask mactex` | --- ## 📋 模板文件 ### 文档摘要模板 ```markdown # 📄 文档摘要 **文件**: {filename} **格式**: {format} **大小**: {size} **创建时间**: {created} **修改时间**: {modified} --- ## 内容概览 - **标题数**: {heading_count} - **段落数**: {paragraph_count} - **表格数**: {table_count} - **图片数**: {image_count} --- ## 核心内容 {content_summary} --- **生成时间**: {timestamp} ``` --- ## 🎯 典型场景 ### 场景 1：读取并分析 Word 报告 ``` 用户：帮我分析这个季度报告 report.docx ↓ 1. doc-read.sh report.docx 2. AI 分析内容 3. 生成摘要和洞察 ``` ### 场景 2：创建 Word 文档 ``` 用户：创建一个项目计划文档 ↓ 1. AI 生成 Markdown 内容 2. doc-write.sh plan.docx 3. 返回文件路径 ``` ### 场景 3：修改现有 Word ``` 用户：把这个合同的甲方改为 ABC 公司 ↓ 1. doc-read.sh contract.docx 2. AI 修改内容 3. doc-write.sh contract-updated.docx ``` ### 场景 4：批量转换 ``` 用户：把所有 Word 文档转为 Markdown ↓ 1. 批量调用 doc-convert.sh 2. 返回转换结果列表 ``` --- ## ⚠️ 注意事项 ### 格式保留 | 内容 | 保留度 | 说明 | |------|--------|------| | 标题层级 | ✅ 100% | H1-H6 完美转换 | | 粗体/斜体 | ✅ 100% | **粗体** *斜体* | | 列表 | ✅ 100% | 有序/无序列表 | | 表格 | ✅ 95% | 简单表格完美，复杂表格可能简化 | | 代码块 | ✅ 90% | 保留语言和格式 | | 图片 | ✅ 100% | 需使用 --extract-media | | 超链接 | ✅ 100% | 完美转换 | ### 可能丢失的内容 | 内容 | 说明 | |------|------| | 复杂样式 | 字体颜色、背景色等 | | 页眉页脚 | Markdown 不支持 | | 分页符 | Markdown 不支持 | | 批注/修订 | 不转换 | | 宏 | 不转换 | | 合并单元格 | 可能简化为普通表格 | ### 最佳实践 1. **优先使用 .docx 格式** - .doc 需要 libreoffice，转换质量略低 2. **图片单独提取** ```bash pandoc input.docx -o output.md --extract-media=./images ``` 3. **保留原始格式** ```bash pandoc input.docx -o output.md --wrap=preserve ``` 4. **使用参考文档（保持样式）** ```bash pandoc input.md -o output.docx --reference-doc=template.docx ``` --- ## 🔧 脚本说明 | 脚本 | 用途 | 参数 | |------|------|------| | `doc-read.sh` | 读取文档 | `<文件> [格式]` | | `doc-write.sh` | 写入文档 | `<输出> <输入|-> [格式]` | | `doc-convert.sh` | 格式转换 | `<输入> -o <输出> [选项]` | | `doc-edit.sh` | 编辑文档 | `<文件> <操作> [内容]` | | `check-deps.sh` | 检查依赖 | 无 | --- ## 📚 相关文档 - [supported-formats.md](./references/supported-formats.md) - 完整格式支持列表 - [pandoc-options.md](./references/pandoc-options.md) - pandoc 参数详解 --- ## 🚀 快速开始 ```bash # 1. 检查依赖 ./scripts/check-deps.sh # 2. 读取 Word ./scripts/doc-read.sh ~/document.docx # 3. 创建 Word echo "# 标题" | ./scripts/doc-write.sh ~/output.docx - # 4. 格式转换 ./scripts/doc-convert.sh ~/input.docx -o ~/output.md ``` --- **版本**: 1.0.0 **创建**: 2026-03-21 **依赖**: pandoc >= 2.0 **作者**: Cyber 🌟 **许可**: MIT

path: README.md
content: # pandoc-docx

> 🔄 Bidirectional conversion between Word (.docx) and Markdown using pandoc

[![Version](https://img.shields.io/badge/version-1.0.0-blue)](https://github.com/openclaw/workspace/tree/main/skills/pandoc-docx)
[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![OpenClaw](https://img.shields.io/badge/OpenClaw-Skill-orange)](https://openclaw.ai)

## Features

- ✅ **Read Word** (.docx) → Markdown
- ✅ **Write Word** (.docx) ← Markdown
- ✅ **Format conversion** (.docx ↔ .md ↔ .pdf ↔ .txt ↔ .html)
- ✅ **Batch processing**
- ✅ **Image extraction**
- ✅ **Format preservation** (headings, bold, lists, tables, code)

## Quick Start

### Installation

```bash
# Install pandoc (required)
sudo apt install pandoc        # Linux
brew install pandoc            # macOS

# Optional: Install additional tools
sudo apt install libreoffice   # .doc support
sudo apt install poppler-utils # PDF reading
```

### Usage

```bash
# Read Word document
./scripts/doc-read.sh ~/document.docx

# Create Word document
echo "# Title" | ./scripts/doc-write.sh ~/output.docx -

# Convert format
./scripts/doc-convert.sh ~/input.docx -o ~/output.md

# Extract images
./scripts/doc-convert.sh ~/input.docx -o ~/output.md --extract-media=./images

# Check dependencies
./scripts/check-deps.sh
```

## Scripts

| Script | Purpose | Example |
|--------|---------|---------|
| `doc-read.sh` | Read documents | `./doc-read.sh file.docx` |
| `doc-write.sh` | Write documents | `./doc-write.sh out.docx in.md` |
| `doc-convert.sh` | Convert formats | `./doc-convert.sh in.docx -o out.md` |
| `doc-edit.sh` | Edit documents | `./doc-edit.sh file.docx append '## New'` |
| `check-deps.sh` | Check dependencies | `./check-deps.sh` |

## Supported Formats

### Input
- ✅ .docx (Word 2007+)
- ⚠️ .doc (Word 97-2003, requires libreoffice)
- ✅ .md / .markdown
- ✅ .txt
- ⚠️ .pdf (read-only, requires pdftotext)
- ✅ .html

### Output
- ✅ .docx
- ✅ .md
- ✅ .pdf (requires texlive)
- ✅ .txt
- ✅ .html
- ✅ .epub

## Examples

### Read and analyze Word document

```bash
# Convert to Markdown
./scripts/doc-read.sh ~/report.docx > report.md

# View content
cat report.md
```

### Create Word from Markdown

```bash
# Create from stdin
echo "# Title

This is content." | ./scripts/doc-write.sh ~/output.docx -

# Create from file
./scripts/doc-write.sh ~/output.docx ~/input.md
```

### Batch conversion

```bash
# Convert all Word files to Markdown
for f in *.docx; do
    ./scripts/doc-convert.sh "$f" -o "${f%.docx}.md"
done
```

### Edit existing document

```bash
# Append content
./scripts/doc-edit.sh ~/report.docx append "## New Section

New content here."

# Replace text
./scripts/doc-edit.sh ~/report.docx replace "old text" "new text"
```

## Dependencies

### Required

| Tool | Install (Linux) | Install (macOS) |
|------|----------------|----------------|
| pandoc | `sudo apt install pandoc` | `brew install pandoc` |

### Optional

| Tool | Purpose | Install (Linux) | Install (macOS) |
|------|---------|----------------|----------------|
| libreoffice | .doc support | `sudo apt install libreoffice` | `brew install --cask libreoffice` |
| poppler-utils | PDF reading | `sudo apt install poppler-utils` | `brew install poppler` |
| texlive | PDF generation | `sudo apt install texlive` | `brew install --cask mactex` |

## Advanced Options

### Use reference document (preserve styles)

```bash
./scripts/doc-convert.sh input.md -o output.docx \
    --reference-doc=template.docx
```

### Extract images

```bash
./scripts/doc-convert.sh input.docx -o output.md \
    --extract-media=./images
```

### Text wrapping modes

```bash
# Preserve original line breaks
./scripts/doc-convert.sh input.docx -o output.md --wrap=preserve

# Auto wrap
./scripts/doc-convert.sh input.docx -o output.md --wrap=auto

# No wrapping
./scripts/doc-convert.sh input.docx -o output.md --wrap=none
```

## License

MIT License - See [LICENSE](LICENSE) file for details.

## Author

**Cyber** 🌟

## Version

1.0.0 (2026-03-21)


path: package.json
content: {
  "name": "pandoc-docx",
  "version": "1.0.0",
  "description": "Bidirectional conversion between Word (.docx) and Markdown using pandoc",
  "keywords": [
    "pandoc",
    "docx",
    "word",
    "markdown",
    "converter",
    "document",
    "openclaw-skill"
  ],
  "author": "Cyber",
  "license": "MIT",
  "homepage": "https://github.com/openclaw/workspace/tree/main/skills/pandoc-docx",
  "repository": {
    "type": "git",
    "url": "https://github.com/openclaw/workspace.git",
    "directory": "skills/pandoc-docx"
  },
  "scripts": {
    "check": "./scripts/check-deps.sh",
    "test": "echo 'Tests coming soon'"
  },
  "dependencies": {
    "pandoc": ">=2.0"
  },
  "optionalDependencies": {
    "libreoffice": ">=6.0",
    "poppler-utils": ">=0.8",
    "texlive": ">=2020"
  },
  "clawhub": {
    "category": "document-processing",
    "featured": false,
    "tags": [
      "pandoc",
      "docx",
      "word",
      "markdown",
      "converter",
      "document-processing",
      "file-conversion",
      "productivity",
      "openclaw",
      "openclaw-skill"
    ]
  },
  "engines": {
    "node": ">=14.0.0",
    "bash": ">=4.0.0"
  },
  "os": [
    "linux",
    "darwin"
  ],
  "files": [
    "SKILL.md",
    "README.md",
    "scripts/",
    "templates/",
    "references/"
  ]
}


path: scripts/doc-read.sh
content: #!/bin/bash
# doc-read.sh - 读取文档内容
# 用途：将 Word/PDF 等格式转换为 Markdown 或纯文本

set -e

FILE="$1"
FORMAT="${2:-markdown}"

# 参数检查
if [ -z "$FILE" ]; then
    echo "用法：$0 <文件路径> [输出格式]"
    echo ""
    echo "支持的格式："
    echo "  markdown (默认) - 输出 Markdown"
    echo "  plain           - 输出纯文本"
    echo "  html            - 输出 HTML"
    echo ""
    echo "示例："
    echo "  $0 ~/document.docx"
    echo "  $0 ~/document.docx plain"
    exit 1
fi

# 检查文件是否存在
if [ ! -f "$FILE" ]; then
    echo "❌ 文件不存在：$FILE" >&2
    exit 1
fi

# 获取文件扩展名
EXT="${FILE##*.}"

# 根据格式选择读取方式
case "$EXT" in
    docx)
        # Word .docx - 直接使用 pandoc
        if ! command -v pandoc &>/dev/null; then
            echo "❌ 需要安装 pandoc" >&2
            echo "安装：sudo apt install pandoc  或  brew install pandoc" >&2
            exit 1
        fi
        pandoc "$FILE" -t "$FORMAT"
        ;;
    
    doc)
        # Word .doc - 需要先转换为 .docx
        if command -v libreoffice &>/dev/null; then
            TMPDOCX=$(mktemp --suffix=.docx)
            libreoffice --headless --convert-to docx "$FILE" --outdir "$(dirname "$TMPDOCX")" >/dev/null 2>&1
            mv "$(dirname "$TMPDOCX")/$(basename "$FILE" .doc).docx" "$TMPDOCX"
            pandoc "$TMPDOCX" -t "$FORMAT"
            rm -f "$TMPDOCX"
        else
            echo "❌ 读取 .doc 需要 libreoffice" >&2
            echo "安装：sudo apt install libreoffice  或  brew install --cask libreoffice" >&2
            exit 1
        fi
        ;;
    
    md|markdown)
        # Markdown - 直接输出
        cat "$FILE"
        ;;
    
    txt|text)
        # 纯文本 - 直接输出
        cat "$FILE"
        ;;
    
    pdf)
        # PDF - 使用 pdftotext
        if command -v pdftotext &>/dev/null; then
            pdftotext "$FILE" -
        else
            echo "❌ 读取 PDF 需要 pdftotext (poppler-utils)" >&2
            echo "安装：sudo apt install poppler-utils  或  brew install poppler" >&2
            exit 1
        fi
        ;;
    
    html|htm)
        # HTML - 使用 pandoc 转换
        if command -v pandoc &>/dev/null; then
            pandoc "$FILE" -t "$FORMAT"
        else
            echo "❌ 需要安装 pandoc" >&2
            exit 1
        fi
        ;;
    
    *)
        echo "❌ 不支持的格式：$EXT" >&2
        echo "支持的格式：docx, doc, md, txt, pdf, html" >&2
        exit 1
        ;;
esac


path: scripts/check-deps.sh
content: #!/bin/bash
# check-deps.sh - 检查依赖
# 用途：验证 pandoc 和相关工具是否已安装

set -e

echo "╔══════════════════════════════════════════════════════════╗"
echo "║          pandoc-docx 依赖检查                             ║"
echo "╚══════════════════════════════════════════════════════════╝"
echo ""

# 检测系统
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    SYSTEM="Linux"
    if command -v apt &>/dev/null; then
        PM="apt"
    elif command -v yum &>/dev/null; then
        PM="yum"
    elif command -v pacman &>/dev/null; then
        PM="pacman"
    else
        PM="unknown"
    fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
    SYSTEM="macOS"
    PM="brew"
else
    SYSTEM="unknown"
    PM="unknown"
fi

echo "系统：$SYSTEM"
echo "包管理器：$PM"
echo ""

# 检查状态
ALL_OK=true

# 检查 pandoc（必需）
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "必需依赖"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

if command -v pandoc &>/dev/null; then
    echo "✅ pandoc"
    pandoc --version | head -1
else
    echo "❌ pandoc - 未安装"
    ALL_OK=false
fi

echo ""

# 检查可选依赖
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "可选依赖"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

if command -v libreoffice &>/dev/null; then
    echo "✅ libreoffice"
    libreoffice --version | head -1
else
    echo "⚠️  libreoffice - 未安装（支持 .doc 格式需要）"
fi

if command -v pdftotext &>/dev/null; then
    echo "✅ pdftotext (poppler-utils)"
    pdftotext -v 2>&1 | head -1
else
    echo "⚠️  pdftotext - 未安装（读取 PDF 需要）"
fi

if command -v tex &>/dev/null; then
    echo "✅ texlive（生成 PDF 需要）"
else
    echo "⚠️  texlive - 未安装（生成 PDF 需要）"
fi

echo ""

# 总结
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "总结"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

if [ "$ALL_OK" = true ]; then
    echo "✅ 所有必需依赖已安装"
    echo ""
    echo "🎉 pandoc-docx 已就绪！"
else
    echo "❌ 缺少必需依赖"
    echo ""
    echo "安装命令："
    if [ "$PM" = "apt" ]; then
        echo "  sudo apt install pandoc"
    elif [ "$PM" = "brew" ]; then
        echo "  brew install pandoc"
    elif [ "$PM" = "yum" ]; then
        echo "  sudo yum install pandoc"
    elif [ "$PM" = "pacman" ]; then
        echo "  sudo pacman -S pandoc"
    else
        echo "  请手动安装 pandoc"
    fi
fi

echo ""

# 安装建议
if [ "$ALL_OK" = false ]; then
    echo "💡 提示：安装后重新运行此脚本验证"
    echo "   $0"
    echo ""
fi

# 完整安装命令
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "完整安装（可选）"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

if [ "$PM" = "apt" ]; then
    echo "sudo apt install pandoc libreoffice poppler-utils texlive"
elif [ "$PM" = "brew" ]; then
    echo "brew install pandoc"
    echo "brew install --cask libreoffice"
    echo "brew install poppler"
    echo "brew install --cask mactex"
fi

echo ""


path: scripts/doc-edit.sh
content: #!/bin/bash
# doc-edit.sh - 编辑文档
# 用途：对现有文档进行简单编辑（追加、替换、提取）

set -e

FILE="$1"
ACTION="$2"
shift 2 || true

if [ -z "$FILE" ] || [ -z "$ACTION" ]; then
    echo "用法：$0 <文件> <操作> [参数]"
    echo ""
    echo "操作:"
    echo "  append <内容>        追加内容到文档末尾"
    echo "  replace <原> <新>    替换文本内容"
    echo "  extract <章节>       提取特定章节"
    echo "  info                 显示文档信息"
    echo ""
    echo "示例:"
    echo "  $0 ~/report.docx append '## 新增章节'"
    echo "  $0 ~/report.docx replace '旧文本' '新文本'"
    echo "  $0 ~/report.docx extract '摘要'"
    echo "  $0 ~/report.docx info"
    exit 1
fi

if [ ! -f "$FILE" ]; then
    echo "❌ 文件不存在：$FILE"
    exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

case "$ACTION" in
    append)
        # 追加内容
        CONTENT="$*"
        if [ -z "$CONTENT" ]; then
            echo "❌ 需要指定追加的内容"
            exit 1
        fi
        
        TMPFILE=$(mktemp --suffix=.md)
        
        # 读取原文档
        "$SCRIPT_DIR/doc-read.sh" "$FILE" markdown > "$TMPFILE"
        
        # 追加内容
        echo "" >> "$TMPFILE"
        echo "$CONTENT" >> "$TMPFILE"
        
        # 写回
        "$SCRIPT_DIR/doc-write.sh" "$FILE" "$TMPFILE" markdown
        rm -f "$TMPFILE"
        
        echo "✅ 已追加内容到：$FILE"
        ;;
    
    replace)
        # 替换内容
        if [ -z "$1" ] || [ -z "$2" ]; then
            echo "❌ 需要指定原文本和新文本"
            echo "用法：$0 <文件> replace <原文本> <新文本>"
            exit 1
        fi
        
        PATTERN="$1"
        REPLACEMENT="$2"
        TMPFILE=$(mktemp --suffix=.md)
        
        # 读取→替换→写回
        "$SCRIPT_DIR/doc-read.sh" "$FILE" markdown | sed "s/$PATTERN/$REPLACEMENT/g" > "$TMPFILE"
        "$SCRIPT_DIR/doc-write.sh" "$FILE" "$TMPFILE" markdown
        rm -f "$TMPFILE"
        
        echo "✅ 已替换内容：$FILE"
        ;;
    
    extract)
        # 提取章节
        SECTION="$*"
        if [ -z "$SECTION" ]; then
            echo "❌ 需要指定章节名称"
            exit 1
        fi
        
        "$SCRIPT_DIR/doc-read.sh" "$FILE" markdown | grep -A 100 "^# $SECTION" | head -100
        ;;
    
    info)
        # 显示文档信息
        echo "📄 文档信息：$FILE"
        echo "大小：$(du -h "$FILE" | cut -f1)"
        echo "格式：${FILE##*.}"
        
        if [[ "$OSTYPE" == "linux-gnu"* ]]; then
            echo "创建：$(stat -c %y "$FILE" 2>/dev/null)"
            echo "修改：$(stat -c %y "$FILE" 2>/dev/null)"
        elif [[ "$OSTYPE" == "darwin"* ]]; then
            echo "创建：$(stat -f %Sm "$FILE")"
            echo "修改：$(stat -f %Sm "$FILE")"
        fi
        
        # 内容统计
        echo ""
        echo "内容统计:"
        CONTENT=$("$SCRIPT_DIR/doc-read.sh" "$FILE" plain 2>/dev/null || echo "")
        if [ -n "$CONTENT" ]; then
            echo "  字符数：$(echo "$CONTENT" | wc -c)"
            echo "  单词数：$(echo "$CONTENT" | wc -w)"
            echo "  行数：$(echo "$CONTENT" | wc -l)"
        fi
        ;;
    
    *)
        echo "❌ 未知操作：$ACTION"
        echo "支持的操作：append, replace, extract, info"
        exit 1
        ;;
esac


path: scripts/doc-write.sh
content: #!/bin/bash
# doc-write.sh - 写入/创建文档
# 用途：将 Markdown 或其他格式转换为 Word 文档

set -e

OUTPUT="$1"
INPUT="${2:--}"
FORMAT="${3:-markdown}"

# 参数检查
if [ -z "$OUTPUT" ]; then
    echo "用法：$0 <输出文件> <输入文件|-> [输入格式]"
    echo ""
    echo "参数说明："
    echo "  输出文件     - 要创建的文件路径（如 ~/document.docx）"
    echo "  输入文件     - 输入文件路径，使用 - 表示从 stdin 读取"
    echo "  输入格式     - 输入文件格式（默认：markdown）"
    echo ""
    echo "示例："
    echo "  $0 ~/output.docx ~/input.md"
    echo "  $0 ~/output.docx - markdown"
    echo "  echo '# 标题' | $0 ~/output.docx -"
    exit 1
fi

# 获取输出文件扩展名
OUT_EXT="${OUTPUT##*.}"

# 创建临时文件
TMPFILE=$(mktemp)

# 读取输入内容
if [ "$INPUT" = "-" ]; then
    # 从 stdin 读取
    cat > "$TMPFILE"
else
    # 从文件读取
    if [ ! -f "$INPUT" ]; then
        echo "❌ 输入文件不存在：$INPUT" >&2
        rm -f "$TMPFILE"
        exit 1
    fi
    cat "$INPUT" > "$TMPFILE"
fi

# 根据输出格式选择写入方式
case "$OUT_EXT" in
    docx)
        # Word .docx - 使用 pandoc
        if ! command -v pandoc &>/dev/null; then
            echo "❌ 需要安装 pandoc" >&2
            echo "安装：sudo apt install pandoc  或  brew install pandoc" >&2
            rm -f "$TMPFILE"
            exit 1
        fi
        pandoc "$TMPFILE" -f "$FORMAT" -o "$OUTPUT"
        echo "✅ 已创建：$OUTPUT"
        ;;
    
    doc)
        # Word .doc - 先创建 .docx 再转换
        if command -v libreoffice &>/dev/null; then
            TMPDOCX=$(mktemp --suffix=.docx)
            pandoc "$TMPFILE" -f "$FORMAT" -o "$TMPDOCX"
            libreoffice --headless --convert-to doc "$TMPDOCX" --outdir "$(dirname "$OUTPUT")" >/dev/null 2>&1
            mv "$(dirname "$OUTPUT")/$(basename "$TMPDOCX" .docx).doc" "$OUTPUT"
            rm -f "$TMPDOCX"
            echo "✅ 已创建：$OUTPUT"
        else
            echo "❌ 写入 .doc 需要 libreoffice" >&2
            rm -f "$TMPFILE"
            exit 1
        fi
        ;;
    
    md|markdown)
        # Markdown - 直接保存
        mv "$TMPFILE" "$OUTPUT"
        echo "✅ 已保存：$OUTPUT"
        ;;
    
    txt|text)
        # 纯文本 - 直接保存
        mv "$TMPFILE" "$OUTPUT"
        echo "✅ 已保存：$OUTPUT"
        ;;
    
    pdf)
        # PDF - 需要 texlive
        if command -v pandoc &>/dev/null; then
            pandoc "$TMPFILE" -f "$FORMAT" -o "$OUTPUT"
            echo "✅ 已创建：$OUTPUT"
        else
            echo "❌ 需要安装 pandoc" >&2
            rm -f "$TMPFILE"
            exit 1
        fi
        ;;
    
    html|htm)
        # HTML - 使用 pandoc
        if command -v pandoc &>/dev/null; then
            pandoc "$TMPFILE" -f "$FORMAT" -o "$OUTPUT"
            echo "✅ 已创建：$OUTPUT"
        else
            echo "❌ 需要安装 pandoc" >&2
            rm -f "$TMPFILE"
            exit 1
        fi
        ;;
    
    *)
        echo "❌ 不支持的格式：$OUT_EXT" >&2
        echo "支持的格式：docx, doc, md, txt, pdf, html" >&2
        rm -f "$TMPFILE"
        exit 1
        ;;
esac

# 清理临时文件
rm -f "$TMPFILE"


path: scripts/doc-convert.sh
content: #!/bin/bash
# doc-convert.sh - 格式转换
# 用途：在不同文档格式之间转换（支持批量转换和图片提取）

set -e

INPUT=""
OUTPUT=""
EXTRACT_MEDIA=""
REFERENCE_DOC=""
WRAP_MODE=""

# 解析参数
while [ $# -gt 0 ]; do
    case "$1" in
        -o|--output)
            OUTPUT="$2"
            shift 2
            ;;
        --extract-media)
            EXTRACT_MEDIA="--extract-media=$2"
            shift 2
            ;;
        --reference-doc)
            REFERENCE_DOC="--reference-doc=$2"
            shift 2
            ;;
        --wrap)
            WRAP_MODE="--wrap=$2"
            shift 2
            ;;
        -h|--help)
            echo "用法：$0 <输入文件> -o <输出文件> [选项]"
            echo ""
            echo "选项:"
            echo "  -o, --output <文件>       输出文件路径（必需）"
            echo "  --extract-media <目录>    提取图片到指定目录"
            echo "  --reference-doc <文件>    使用参考文档（保持样式）"
            echo "  --wrap <模式>             文本换行模式 (preserve|auto|none)"
            echo "  -h, --help                显示帮助信息"
            echo ""
            echo "支持的格式:"
            echo "  输入：docx, doc, md, txt, pdf, html"
            echo "  输出：docx, doc, md, txt, pdf, html, epub"
            echo ""
            echo "示例:"
            echo "  $0 input.docx -o output.md"
            echo "  $0 input.md -o output.docx"
            echo "  $0 input.docx -o output.md --extract-media=./images"
            echo "  $0 input.md -o output.docx --reference-doc=template.docx"
            exit 0
            ;;
        *)
            if [ -z "$INPUT" ]; then
                INPUT="$1"
            fi
            shift
            ;;
    esac
done

# 参数验证
if [ -z "$INPUT" ] || [ -z "$OUTPUT" ]; then
    echo "❌ 错误：需要指定输入和输出文件" >&2
    echo "使用 -h 查看帮助" >&2
    exit 1
fi

# 检查输入文件
if [ ! -f "$INPUT" ]; then
    echo "❌ 文件不存在：$INPUT" >&2
    exit 1
fi

# 检查 pandoc
if ! command -v pandoc &>/dev/null; then
    echo "❌ 需要安装 pandoc" >&2
    echo "安装：sudo apt install pandoc  或  brew install pandoc" >&2
    exit 1
fi

# 获取文件扩展名
INPUT_EXT="${INPUT##*.}"
OUTPUT_EXT="${OUTPUT##*.}"

# 特殊处理 .doc 格式
if [ "$INPUT_EXT" = "doc" ]; then
    if command -v libreoffice &>/dev/null; then
        TMPDOCX=$(mktemp --suffix=.docx)
        libreoffice --headless --convert-to docx "$INPUT" --outdir "$(dirname "$TMPDOCX")" >/dev/null 2>&1
        mv "$(dirname "$TMPDOCX")/$(basename "$INPUT" .doc).docx" "$TMPDOCX"
        INPUT="$TMPDOCX"
        trap "rm -f $TMPDOCX" EXIT
    else
        echo "❌ 转换 .doc 需要 libreoffice" >&2
        exit 1
    fi
fi

# 执行转换
pandoc "$INPUT" -o "$OUTPUT" $EXTRACT_MEDIA $REFERENCE_DOC $WRAP_MODE

echo "✅ 转换完成：$INPUT → $OUTPUT"

# 如果有提取媒体，显示信息
if [ -n "$EXTRACT_MEDIA" ]; then
    MEDIA_DIR="${EXTRACT_MEDIA#--extract-media=}"
    if [ -d "$MEDIA_DIR" ]; then
        IMAGE_COUNT=$(find "$MEDIA_DIR" -type f | wc -l)
        echo "📸 已提取 $IMAGE_COUNT 个文件到：$MEDIA_DIR"
    fi
fi


path: references/supported-formats.md
content: # 支持的文档格式

## 输入格式

| 格式 | 扩展名 | 读取 | 写入 | 说明 |
|------|--------|------|------|------|
| **Word 2007+** | .docx | ✅ | ✅ | 主要支持格式 |
| **Word 97-2003** | .doc | ⚠️ | ⚠️ | 需要 libreoffice |
| **Markdown** | .md, .markdown | ✅ | ✅ | 原生支持 |
| **纯文本** | .txt | ✅ | ✅ | 原生支持 |
| **PDF** | .pdf | ⚠️ | ❌ | 仅读取，需 pdftotext |
| **HTML** | .html, .htm | ✅ | ✅ | 网页格式 |
| **EPUB** | .epub | ✅ | ✅ | 电子书格式 |
| **LaTeX** | .tex | ✅ | ✅ | 学术文档 |
| **reStructuredText** | .rst | ✅ | ✅ | Python 文档 |
| **Org-mode** | .org | ✅ | ✅ | Emacs 格式 |
| **MediaWiki** | .wiki | ✅ | ✅ | Wiki 格式 |
| **JSON** | .json | ✅ | ✅ | 数据结构 |

## 输出格式

| 格式 | 扩展名 | 支持 | 说明 |
|------|--------|------|------|
| **Word 2007+** | .docx | ✅ | 主要输出格式 |
| **Word 97-2003** | .doc | ⚠️ | 需要 libreoffice |
| **Markdown** | .md, .markdown | ✅ | 推荐输出格式 |
| **纯文本** | .txt | ✅ | 无格式文本 |
| **PDF** | .pdf | ✅ | 需 texlive |
| **HTML** | .html | ✅ | 网页格式 |
| **EPUB** | .epub | ✅ | 电子书 |
| **LaTeX** | .tex | ✅ | 学术排版 |
| **PowerPoint** | .pptx | ✅ | 演示文稿 |
| **DOCX 模板** | .dotx | ✅ | Word 模板 |

## 格式转换矩阵

```
          输出
输入      docx  md  pdf  txt  html  epub
docx      -     ✅   ✅   ✅   ✅    ✅
md        ✅    -    ✅   ✅   ✅    ✅
pdf       ❌    ❌   -    ✅   ❌    ❌
txt       ✅    ✅   ✅   -    ✅    ✅
html      ✅    ✅   ✅   ✅   -     ✅
epub      ✅    ✅   ✅   ✅   ✅    -
```

## 特殊说明

### .docx（Word 2007+）

**优势：**
- 完整格式支持
- 广泛兼容
- 可编辑性强

**限制：**
- 二进制格式（实际是 ZIP+XML）
- 需要 pandoc

### .doc（Word 97-2003）

**说明：**
- 旧格式，不推荐使用
- 需要 libreoffice 转换
- 可能丢失部分格式

**建议：**
- 优先使用 .docx
- 旧文档建议转换为 .docx

### Markdown

**优势：**
- 纯文本，易读易写
- 版本控制友好
- 转换质量高

**限制：**
- 不支持复杂样式
- 不支持页眉页脚

### PDF

**读取：**
- 需要 pdftotext (poppler-utils)
- 仅提取文本，格式丢失

**写入：**
- 需要 texlive
- 质量高，适合打印

## 最佳实践

1. **优先使用 .docx**
   - 最好的格式支持
   - 最少的兼容问题

2. **Markdown 作为中介**
   - 编辑和版本控制
   - 转换为其他格式

3. **避免循环转换**
   - .md → .docx → .md 可能丢失格式
   - 保留原始格式备份

4. **图片单独处理**
   - 使用 --extract-media
   - 图片保存在独立目录

## 相关资源

- [pandoc 官方文档](https://pandoc.org/)
- [pandoc 用户指南](https://pandoc.org/MANUAL.html)
- [LibreOffice 文档](https://www.libreoffice.org/)


path: templates/doc-summary.md
content: # 📄 文档摘要

**文件**: {filename}  
**格式**: {format}  
**大小**: {size}  
**创建时间**: {created}  
**修改时间**: {modified}

---

## 内容概览

- **标题数**: {heading_count}
- **段落数**: {paragraph_count}
- **表格数**: {table_count}
- **图片数**: {image_count}
- **字符数**: {char_count}
- **单词数**: {word_count}

---

## 核心内容

### 主要章节

1. {section_1}
2. {section_2}
3. {section_3}

### 关键信息

{key_points}

---

## 格式信息

- **包含粗体**: {has_bold}
- **包含斜体**: {has_italic}
- **包含列表**: {has_lists}
- **包含代码**: {has_code}
- **包含表格**: {has_tables}
- **包含链接**: {has_links}

---

**生成时间**: {timestamp}  
**生成工具**: pandoc-docx skill


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)