원클릭으로
pdf-to-markdown
将中文学术/古籍类PDF无损转换为结构化Markdown文件集,支持章节识别、跨页标题合并、并行转换
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
将中文学术/古籍类PDF无损转换为结构化Markdown文件集,支持章节识别、跨页标题合并、并行转换
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
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 |