提取 .docx/.xlsx/.pdf/图片 文档内容,转换为 Markdown 格式。
/extract-doc <file_path>
参数:
file_path: 文档路径(支持 .docx/.xlsx/.pdf/.png/.jpg/.bmp)格式扩展名提取方法特殊处理Word.docxpython-docx段落、表格、列表Excel.xlsxopenpyxl多 Sheet、表格PDF.pdfpymupdf + MCP OCR文本型/扫描型图片.png/.jpg/.bmpMCP OCR中文/英文/代码
必须使用 MCP OCR,禁止安装本地 OCR 库 (pytesseract 等)。
工具: mcp__zai-mcp-server__extract_text_from_screenshot
text
参数:
image_source: 图片路径或 URL
prompt: 提取指令 (如 "提取所有文本内容,保持原有排版")
programming_language: 代码语言 (可选,如 "python")
首次使用前执行
bash
pip install python-docx openpyxl pymupdf
库版本用途python-docx>=0.8.11Word 解析openpyxl>=3.1.0Excel 解析pymupdf>=1.23.0PDF 解析
验证文件存在后,根据扩展名选择提取方法。
python
from docx import Document
doc = Document(path)
# 段落: 识别标题层级
for para in doc.paragraphs:
if para.style.name.startswith('Heading'):
level = para.style.name.split()[-1]
# 输出: {'#' * int(level)} {para.text}
else:
# 输出: para.text
# 表格: 转 Markdown 表格
for table in doc.tables:
# 第1行为表头, 其余为数据行
python
from openpyxl import load_workbook
wb = load_workbook(path)
for sheet_name in wb.sheetnames:
sheet = wb[sheet_name]
# 第1行检测表头, 第2行起为数据, 转为 Markdown 表格
python
import fitz # pymupdf
doc = fitz.open(path)
for i, page in enumerate(doc, 1):
text = page.get_text().strip()
if text:
# 文本型 PDF - 直接提取
else:
# 扫描型 PDF - 渲染为图片 + MCP OCR
pix = page.get_pixmap(dpi=150)
pix.save(f"/tmp/pdf_page_{i}.png")
# 调用 mcp__zai-mcp-server__extract_text_from_screenshot(...)
text
直接调用:
mcp__zai-mcp-server__extract_text_from_screenshot(
image_source="D:/docs/scan.png",
prompt="提取图片中的所有文字,保持原有排版和表格结构"
)
转换为 Markdown,保持原有结构。
markdown
# 文档名称
## 元信息
- 类型: [Word/Excel/PDF/图片]
- 页数/工作表: [N]
- OCR: [是/否]
## 内容
[提取的文本内容,保持原始结构]
### 表格 1
| 列1 | 列2 | 列3 |
|-----|-----|-----|
| ... | ... | ... |
错误处理文件不存在验证路径,搜索相似文件名库未安装显示 pip install 命令大文件 (>10MB)警告并建议分段提取编码问题尝试 UTF-8/GBK 解码PDF 加密提示需要密码OCR 失败检查图片清晰度,建议 DPI >= 150不支持的格式列出支持的格式列表
文档类型用例需求文档 (.docx)提取功能需求转 Markdown规格书 (.pdf)提取芯片规格、寄存器描述测试用例 (.xlsx)提取测试项转为可读格式扫描件 (.png)OCR 识别手写笔记代码截图提取代码文本