with one click
pdf-to-markdown
将中文学术/古籍类PDF无损转换为结构化Markdown文件集,支持章节识别、跨页标题合并、并行转换
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
将中文学术/古籍类PDF无损转换为结构化Markdown文件集,支持章节识别、跨页标题合并、并行转换
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Windows 文件夹三段式可验证归档(robocopy 复制 + 逐文件校验 + 可选删除源),保留属性/时间戳/空目录,支持外部引用检查避免误删,支持归档日志留存(含自动命名与追加模式)便于审计,支持归档前 HTML 声明一致性校验
静态站点冗余资源分析器,识别"声明但缺失"与"存在但未引用"两类问题,支持 HTML 引用提取、文件存在性校验、SHA256 哈希对比与决策矩阵,适用于 Trae Work 等模板生成的站点归档前清理
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
搜索全网内容,返回脚本整理后的结构化结果(标题、链接、作者、摘要等)
获取知乎热榜列表,返回脚本整理后的结构化结果(标题、链接、缩略图、摘要)
搜索知乎站内内容,返回脚本整理后的结构化结果(标题、链接、作者、摘要等)
| name | pdf-to-markdown |
| version | 1.0.0 |
| description | 将中文学术/古籍类PDF无损转换为结构化Markdown文件集,支持章节识别、跨页标题合并、并行转换 |
| metadata | {"openclaw":{"requires":{"bins":["python3"],"packages":["pdfplumber","pypdfium2"]}}} |
| argument-hint | <pdf-path> |
| disable-model-invocation | false |
| user-invocable | true |
| paths | [".agents/skills/pdf-to-markdown/**","**/*.pdf"] |
pdf-to-markdown
PDF 全文提取 + 章节结构分析 + Markdown 拆分转换。适用于中文学术/古籍类 PDF(含多级标题、注释、双栏排版)。
核心能力:
pdfplumber 全文抽取,区分扫描页(无文本)/文本页;「五十一、不自生...其私(今」 + 「7章)」);ThreadPoolExecutor 并行写入多组章节,加速大批量转换;pdf_page_meta.json 通过 schema 校验,及早暴露结构异常;pypdfium2(不依赖 poppler)渲染首页为 PNG。适用场景:
pdf_extract.py:
| 参数名称 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
pdf_path | string (positional) | 是 | 无 | 待提取的 PDF 文件路径 |
--output-dir, -o | string | 否 | PDF 同目录 | 中间产物输出目录 |
--page-range | string | 否 | 全文 | 页码范围,形如 1-100 |
pdf_to_markdown.py:
| 参数名称 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
meta_json | string (positional) | 是 | 无 | pdf_page_meta.json 路径 |
raw_txt | string (positional) | 是 | 无 | pdf_raw_text.txt 路径 |
--output-dir, -o | string | 是 | 无 | Markdown 输出目录 |
--cover | string | 否 | 无 | 封面图片路径(可选) |
pdf_extract.py 在 output_dir 下产出:
<output_dir>/
├── pdf_raw_text.txt # 全文逐页文本(含 ===== PAGE N ===== 分隔符)
├── pdf_structure_analysis.md # 结构分析报告(Mermaid 图 + 章节表)
├── pdf_page_meta.json # 结构化元数据(符合 page-meta.schema.json)
└── <pdf_stem>-cover.png # 封面图片
pdf_to_markdown.py 在 output_dir 下产出基于章节结构拆分的 Markdown 文件集(具体目录布局由调用方的章节模型决定)。
pdf_to_markdown_en.py(英文学术论文):
| 参数名称 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
meta_json | string (positional) | 是 | 无 | pdf_page_meta.json 路径 |
raw_txt | string (positional) | 是 | 无 | pdf_raw_text.txt 路径 |
--output-dir, -o | string | 是 | 无 | Markdown 输出目录 |
--cover | string | 否 | 无 | 封面图片路径(可选) |
输出结构:
<output_dir>/
├── index.md # 论文元信息 + 目录
├── abstract.md # 摘要
├── sections/
│ ├── 01-introduction.md
│ ├── 02-methods.md
│ └── ...
├── references.md # 参考文献
└── appendix/ # 附录(如有)
>=3.10pdfplumber>=0.11pypdfium2>=5.0jsonschema(可选,缺失时自动退回轻量断言验证)pip install pdfplumber pypdfium2
# 可选:pip install jsonschema
无需任何外部服务。pypdfium2 自带原生库,不依赖 poppler/Ghostscript。
{baseDir} 是 agent 框架在运行时自动替换的变量,指向当前 skill 目录的绝对路径(即 skills/pdf-to-markdown/)。
# 步骤1:提取 PDF 文本并分析结构
python3 {baseDir}/scripts/pdf_extract.py <pdf_path> --output-dir <dir>
# 步骤2:将提取结果转换为 Markdown 文件集
python3 {baseDir}/scripts/pdf_to_markdown.py <meta_json_path> <raw_txt_path> --output-dir <dir>
| 错误码/场景 | 异常场景 | 应对策略 |
|---|---|---|
FontBBox 警告 | pdfminer 内部无害 warning | 已通过 warnings.filterwarnings("ignore") 自动抑制 |
| 扫描页(无可提取文本) | PDF 中嵌入图像而非文字 | 标记为 [SCAN_PAGE_NO_TEXT],并在 page-meta.json.scan_pages 中列出 |
| 单页提取异常 | 字体损坏、加密区段 | 写入 [EXTRACT_ERROR] 占位,不中断整体流程 |
| 编码异常 | 非 UTF-8 字符 | 强制 UTF-8 写入,无法解码字符以占位符替代 |
| Schema 验证失败 | meta JSON 结构缺失字段 | 报告具体字段错误,退出码非零 |
缺失 jsonschema 库 | 环境未安装可选依赖 | 自动退回基本断言验证,打印 [INFO] jsonschema 不可用 |
| PDF 文件不存在 | 路径错误 | 写入 stderr 并返回退出码 1 |