Install
openclaw skills install @sedey999/wisely-read-ppt解析 PPT(.pptx) 或 PDF 文件(或两者同时提供),逐页生成结构化的 docx 解析文档。每页固定包含:整页截图、可编辑文字整理、插图描述(文字中以行内标记形式嵌入)。当用户需要:把演示文稿或 PDF 转成可编辑的逐页 Word 文档、提取 PPT 内容为文字稿、做 PPT/PDF 的图文解析稿、'逐页解析'、'生成解析文件'、'转 docx'、'PPT 解析'、'PDF 解析'时使用。
openclaw skills install @sedey999/wisely-read-ppt把演示文稿或 PDF 按页拆解,生成一份以文字为主、标记符号系统表达图片位置与内容的 Word 文档。文档能以纯文字形式"说出"每页 PPT 有什么内容,同时嵌入整页截图供核对。
⚠️ 维护提醒:本 skill 的标记符号系统、输出模板在 SKILL.md 和 reference/subagent-workflow.md 中各有一份完整副本。修改任一处时,必须同步更新另一处。
| 场景 | 方式 |
|---|---|
| 单文件 ≤10 页 | 主代理直接完成全部三阶段 |
| 单文件 >10 页 或 多文件 | spawn 子代理并行处理(每个文件一个),主代理逐个复核 |
为什么:子代理继承主代理模型,能力相同。小文件直接处理更高效;大文件或多文件时并行才划算。
<当前工作区>/
├── ppt-parse-working/ ← 工作目录(初稿 + 素材)
│ └── <任务名>/
│ ├── 初稿_<文件名>.docx
│ └── 初稿_<文件名>_assets/ ← 脚本提取的素材
└── ppt-parse-final/ ← 复核后成品目录
└── <文件名>_解析稿.docx
PDF 输入只需 poppler(pdftoppm),无需渲染器。PPT 输入需要渲染器把 PPTX 转为 PDF,按以下流程检测和配置。
检测结果记录到
local-env.json(见「本地环境配置」章节),下次直接读取配置跳过检测。
阶段 1:检测已有渲染器
Windows:
pywin32 + COM Kwpp.Application)+ 有头环境 -> COM 转换 PPTX 为 PDF,结束soffice)-> 无头转换,结束Linux:
which soffice)-> 无头转换,结束Mac / 其他:
which soffice)-> 无头转换,结束阶段 2:自动安装 LibreOffice
# Ubuntu / Debian
apt install libreoffice-core libreoffice-impress poppler-utils
# CentOS / RHEL
dnf install libreoffice poppler-utils
# macOS(方案 A:Homebrew)
brew install --cask libreoffice
brew install poppler # 可选,缺失时 fallback 到 pymupdf
macOS 无 Homebrew 或 sudo 被拒时,使用无 sudo 方案(详见 reference/macos-install.md):
# 简要步骤(完整指南见 reference/macos-install.md)
curl -L -o ~/Downloads/LibreOffice.dmg <官方下载链接> # 按 CPU 架构选择
hdiutil attach ~/Downloads/LibreOffice.dmg -nobrowse
cp -R "/Volumes/LibreOffice/LibreOffice.app" ~/Applications/
ln -sf ~/Applications/LibreOffice.app/Contents/MacOS/soffice ~/.local/bin/soffice
macOS 安装后
soffice可能不在 PATH 中,需软链接到~/.local/bin或/usr/local/bin。详见reference/macos-install.md。
阶段 3:WPS 兜底(仅 Linux)
pywpsrpc 需要 WPS Office for Linux 11.1.0.9080+ 和有头环境(X 桌面),无头环境跳过。
which wpp 或 which wps)+ 有头环境 -> pip install pywpsrpc,RPC 转换 PPTX 为 PDF
阶段 4:用户问询
首次检测完成后,将结果写入 local-env.json(位于 skill 目录下):
{
"platform": "linux",
"hasDisplay": true,
"renderer": "libreoffice",
"sofficePath": "/usr/bin/soffice",
"wpsAvailable": false,
"notes": ""
}
renderer:"libreoffice" / "wps-com" / "wps-rpc" / "user-pdf"(用户自行提供 PDF)notes:记录限制说明,如「LibreOffice 安装失败,用户拒绝安装 WPS,需提供 PDF」which pdftoppm # 首选,缺失时 fallback 到 pymupdf
poppler(pdftoppm)为首选 PDF 渲染器。未安装时 parse.py 自动 fallback 到 pymupdf,功能等价。
Python 依赖由脚本自动安装,也可手动:
pip install python-pptx pdfplumber pymupdf python-docx Pillow pytesseract
| 输入 | 处理 |
|---|---|
| 仅 .pptx | 按渲染器检测流程获取渲染器;渲染截图 + python-pptx 提取文字/图片 |
| 仅 .pdf | 无需渲染器;pdftoppm/pymupdf 转图 + 文字提取 |
| 两者都有 | 按"来源文件"分节,各自逐页解析 |
如果
local-env.json中renderer为"user-pdf",则仅接受 PDF 输入,PPT 输入时提示用户先自行导出 PDF。
read 工具读取本地图片文件识别内容)。如当前模型无法识图,停止并告知用户。mkdir -p ppt-parse-working ppt-parse-finalparse.py 提取素材(默认 150 DPI)read 整页截图校准文字、read extracted_pics 原图识别信息图parse.py --dpi 300 生成高分辨率整页截图再识别(按「高 DPI 重渲染规则」执行)read 图片核对修正(可能需要 read extracted_pics 原图或重新生成高 DPI 截图),确认全部完成后保存ppt-parse-final/步骤一:spawn 子代理
对每个文件 spawn 一个子代理:
sessions_spawn(
task="你有一个 PPT/PDF 解析任务,请严格按照 reference 文件中的步骤执行。
【任务信息】
- 任务名:<任务名>
- 输入文件:<绝对路径>
- 输出根目录:<当前工作区绝对路径>/ppt-parse-working
- skill 脚本路径:<skill目录绝对路径>/scripts/parse.py
- reference 手册:<skill目录绝对路径>/reference/subagent-workflow.md
【要求】
1. 先完整阅读 reference 手册
2. 你负责阶段一(脚本提取)+ 阶段二(逐页视觉校准),不做复核
3. 用 read 工具读取本地图片文件进行视觉识别
4. **标点符号保真**:extracted_text.json 中的文字只能重排顺序,不能改写。禁止更改任何标点符号(特别是中英文引号不得互换),原文是什么就是什么
5. 完成后回报初稿路径和素材目录路径",
taskName="ppt_parse_<任务名>",
runtime="subagent",
context="isolated",
sandbox="inherit",
cwd="<当前工作区路径>"
)
多文件时同时 spawn N 个子代理,然后 sessions_yield 等待完成。
步骤二:主代理复核
强制要求:所有初稿(无论自检还是子代理初稿)必须经复核才能交付。抱着"大概率有遗漏/错误"的纠错心态逐页检查,而不是走过场。
子代理回报后,逐个取出初稿和素材进行复核:
检查阶段:
read 整页截图,对照文字检查漏字、错字、顺序read extracted_pics 原图,核对逐字转录parse.py --dpi 300 生成高分辨率整页截图,再核对细节extracted_text.json 的 images 数组是否一致<!-- 批注:... --> 的页面修正阶段:
read 对应页面的图片来核对:可能需要 read extracted_pics 原图核对细节,或重新运行 parse.py --dpi 300 生成高分辨率截图再识别,确保修正内容准确无误ppt-parse-final/交付检查点:必须完成全页复核且待改清单全部修正,否则不能交付文件。
无论 ≤10 页直接处理还是 >10 页子代理分工,交付时都必须执行此步骤。
确认 ppt-parse-final/ 下文件无误后交付。ppt-parse-working/ 保留作为审计回溯。
⚠️ 强制汇报:交付时必须向用户提交一份任务汇报,内容如下:
markdown ## PPT/PDF 解析任务汇报 ### 基本信息 - 输入文件:<文件名> - 总页数:X 页 - 处理模式:直接处理 / 子代理分工 ### 三阶段完成情况 1. **阶段一(脚本提取)**:✅/❌ <说明> 2. **阶段二(逐页视觉校准)**:✅/❌ <说明,包括处理了多少页、多少图片标记> 3. **阶段三(全页复核)**:✅/❌ <说明,包括复核了多少页、待改清单条目数、逐项修正情况、最终验证结果> ### 复核质量自评 - 复核页数:X / X 页 - 待改清单:共 X 条(逐条列出问题及修正方式) - 修正后重新验证:X / X 条已验证 - 遗留问题(如有):逐条列出 - 未复核的页面(如有):逐条列出原因 ### 交付文件 - 最终文件路径:<路径>如果阶段三未完成或未全部复核,不得声称"已完成",必须在汇报中如实标注遗留问题。
| 阶段 | 内容 | 单文件≤10页 | 多文件/大文件 |
|---|---|---|---|
| 阶段一 | 脚本提取文字、图片、整页截图 | 主代理 | 子代理 |
| 阶段二 | 逐页视觉校准:文字重排、图片标记、信息图逐字转录 | 主代理 | 子代理 |
| 阶段三 | 全页复核、待改清单、逐项修正、终稿输出 | 主代理自检 | 主代理复核 |
脚本提取仅完成 30% 工作量。70% 靠视觉核对 + 复核。绝对不能跑完脚本就交付。
⚠️ 标点符号保真(绝对规则):
extracted_text.json中的文字是原始文本,只能重排顺序,不能改写。禁止更改任何标点符号(特别是中英文引号不得互换),禁止增添/删除/替换任何字符。原文是什么,就是什么。
所有标记用 /.../ 包裹。
| 标记 | 适用场景 | 要求 | 示例 |
|---|---|---|---|
/[pic NN:简述]/ | 辅助配图:logo、照片、报纸/杂志版面、网页截图、弱相关密集文字长图、装饰图 | 一句话简述,不读小字 | /[pic 01:微信logo]/、/[pic 02:每日新报终刊版面]/ |
/[pic NN]*** ... ***/ | 核心信息图:图表、流程图、架构图、数据图等 | 逐字转录所有可见文字 | 见下方格式 |
块级标记格式:
/[pic 04]***
图表类型:柱状图
标题:2020-2025年中国对外直接投资规模
横轴:年份(2020-2025)
纵轴:投资金额(亿美元)
数据:
- 2020年:1329亿美元
- 2021年:1452亿美元
图例:对外直接投资金额、同比增速
***/
images 数组长度一致/[pic 标记开头注释:
<!-- 本文档解析自文件:[文件名],合计 X 页。
标记说明:
/[pic NN:简述]/ -> 行内小图(logo/照片/截图)
/[pic NN]*** ... ***/ -> 块级大图(图表/脑图/流程图,需细读)
无标记文字 -> PPT/PDF 可编辑文本(经视觉核对顺序)
每页开头嵌入整页截图供核对 -->
每页结构:
page N
【此处插入整页截图】
[文字内容按逻辑顺序排列,图片标记紧贴对应文字]
示例一(文本组成的图表,无嵌入图片,全是可编辑形状文字):
page 4
组织架构
A 技术部
研发组 / 测试组 / 运维组
(前端、后端、算法、数据)
B 产品部
产品经理 / 设计师
C 运营部
内容运营 / 用户运营 / 活动运营
示例二(文字为主+logo辅助):
page 6
B. 自媒体及其平台
自媒体舆情监测重点平台
第一梯队 /[pic 01:微信]/ /[pic 02:微博]/ /[pic 03:抖音]/
第二梯队 /[pic 04:快手]/ /[pic 05:B站]/ /[pic 06:小红书]/
/[pic 01] 标记(框图是 PPT 形状不是嵌入图片)<!-- 批注:... --> 提醒复核)python <skill目录>/scripts/parse.py <input.pptx|input.pdf> [more files...] \
--out "<输出路径>.docx" --keep
| 参数 | 说明 |
|---|---|
--out | 输出 docx 路径(默认:解析结果.docx) |
--dpi | 整页截图 DPI(默认 150。小字/复杂图看不清时,调高到 300 重新渲染) |
--assets-dir | 素材输出目录(默认:输出文件名_assets) |
--keep | 保留中间临时文件 |
--no-install | 不自动安装 Python 依赖 |
当遇到以下情况,默认 150 DPI 整页截图里文字/结构模糊:
处理步骤:
--dpi 300 参数(脚本会自动覆盖 page_NN.png 整页截图,extracted_pics 原图和 extracted_text.json 不受影响,无需重新提取)page_NN.png 识别细节<!-- 批注:整页截图 300 DPI 下仍然模糊,无法准确转录 --> 说明⚠️ extracted_pics 里的嵌入图片是从源文件直接提取的原始分辨率文件,本身就是最高清,不需要通过调高 DPI 重新生成。
输出.docx:阶段一 docx(含整页截图 + 原始文字)输出_assets/<源文件名>/extracted_text.json:结构化数据输出_assets/<源文件名>/page_NN.png:每页整页截图输出_assets/<源文件名>/extracted_pics/page_NN_pic_NN.png:提取的内嵌图片