About paddle-ocr
An OCR skill for legal materials that converts PDFs and common image files into Markdown. It also archives source files, structured results, and batch data for review and further analysis.
Key features
- 01Convert PDFs and images to Markdown
- 02Save JSON and batch results
- 03Archive originals and extracted images
- 04Process selected pages and split large files
- 05Inspect layout parsing output
Use cases
- 01Organize scanned case files and evidence
- 02Convert court notices or invoices to text
- 03Prepare documents for legal analysis or RAG
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ cat-xierluo/ legal-skills --skill paddle-ocrAfter installing, type/paddle-ocrin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
CHANGELOG.mdLICENSE.txtdocs/ROADMAP_LEGAL_OCR.mdreferences/output_schema.mdscripts/convert.jsconvert.pylayout_caller.pylib.pyoptimize_file.pysmoke_test.pysplit_pdf.pyDetails
From the project READMEPaddleOCR 法律 PDF 转 Markdown
本技能服务于法律材料 OCR。默认目标不是返回一段临时文本,而是:
- 将本地 PDF / 图片转换为可继续编辑和分析的 Markdown。
- 在
archive/下保留完整归档,便于复核、追溯和二次处理。
何时使用
在以下场景使用本技能:
- 需要把卷宗、病历、证据材料、法院通知、财报、票据等扫描 PDF 转成 Markdown。
- 文档包含表格、印章、页眉页脚、多栏排版、公式或复杂版面。
- 希望保留一个技能内的 archive,沉淀原文件、Markdown、结构化 JSON 和批次结果。
- 后续还要继续做法律分析、证据摘录、知识入库或 RAG 切片。
在以下场景不要优先使用本技能:
- 只是快速读取一小段清晰文本,且不需要 Markdown 和归档。
- 只是截图抄字,速度比结构化质量更重要。
- 输入不是 PDF / 常见图片格式。
主产出
默认主产出只有两类:
- Markdown 文件:保存在源文件同目录,默认与原文件同名、扩展名为
.md - archive 归档目录:保存在
paddle-ocr/archive/时间戳_文件名/
archive 默认包含:
- 原始输入文件副本
- 最终
result.md - 最终
result.json - 批次级
batches/*.json - 提取出的图片资源
metadata.json
依赖
系统依赖
| 依赖 | 安装方式 |
|---|---|
python3 | macOS 通常已内置 |
uv | macOS: brew install uv |
Python 包
脚本使用 uv run 执行,依赖写在脚本头部,无需单独维护 requirements.txt。
首次配置
获取 API 信息
- 打开 PaddleOCR 官网
- 进入对应模型的 API 页面
- 在示例代码中复制:
API_URLAccess Token
配置方式
优先编辑 config/.env:
cd paddle-ocr/config
cp .env.example .env
nano .env
必填项:
PADDLEOCR_DOC_PARSING_API_URLPADDLEOCR_ACCESS_TOKEN
常用命令
主工作流:生成 Markdown + archive
在技能根目录运行:
uv run scripts/convert.py "/path/to/legal-document.pdf"
或继续兼容旧入口:
/usr/bin/osascript -l JavaScript scripts/convert.js "/path/to/legal-document.pdf"
可选参数:
uv run scripts/convert.py "/path/to/legal-document.pdf" --pages "1-20"
uv run scripts/convert.py "/path/to/legal-document.pdf" --output "/tmp/output.md"
uv run scripts/convert.py "/path/to/legal-document.pdf" --archive-name "某案卷宗-证据一"
底层调试:只调用解析接口,输出结构化 JSON
uv run scripts/layout_caller.py --file-path "/path/to/legal-document.pdf" --pretty
uv run scripts/layout_caller.py --file-url "https://example.com/document.pdf" --stdout --pretty
当你只想检查原始接口结果,或后续要自己解析表格/坐标信息时,使用这个底层脚本。
自检
uv run scripts/smoke_test.py --skip-api-test
uv run scripts/smoke_test.py
拆分页码
uv run scripts/split_pdf.py input.pdf output.pdf --pages "1-5,8,10-12"
法律 PDF 工作流
按以下顺序工作:
- 优先使用
scripts/convert.py。 - 如只需部分页码,先传
--pages,避免整卷上传。 - 对大体量卷宗,脚本会按配置自动分批请求,再合并为一个 Markdown。
- 需要复核时,到
archive/查看:output/result.mdoutput/result.jsonmetadata.jsonbatches/*.json
大文件策略
本技能为了法律材料的稳定性,默认采用保守批次策略:
- PDF 页数超过
PADDLEOCR_BATCH_PAGES时自动分批 - 预估 Base64 大小超过
PADDLEOCR_MAX_BASE64_MB时自动分批
这意味着它可能比官方上限更早拆分,但通常能降低长卷宗、病历合并件和扫描质量不稳定文档的失败率。
输出说明
Markdown
- 默认保存到源文件同目录
- 如果传
--output且是.md文件路径,则保存到指定路径 - 如果
--output是目录,则在该目录下生成同名.md
archive
默认归档目录结构:
archive/
└── 20260405_153000_文件名/
├── input/
│ └── 原文件.pdf
├── output/
│ ├── result.md
│ ├── result.json
│ └── images/
├── batches/
│ ├── batch_001_1-40.json
│ └── batch_002_41-67.json
└── metadata.json
配置项
编辑 config/.env:
| 选项 | 默认值 | 说明 |
|---|---|---|
PADDLEOCR_DOC_PARSING_API_URL | 空 | 官方要求的完整 layout-parsing 端点 |
PADDLEOCR_ACCESS_TOKEN | 空 | 官方 Access Token |
PADDLEOCR_DOC_ORIENTATION | false | 是否启用方向分类 |
PADDLEOCR_DOC_UNWARP | false | 是否启用去扭曲 |
PADDLEOCR_CHART_RECOG | false | 是否启用图表识别 |
PADDLEOCR_DOC_PARSING_TIMEOUT | 600 | 单次请求超时秒数 |
PADDLEOCR_BATCH_PAGES | 40 | PDF 自动分批页数阈值兼批次大小 |
PADDLEOCR_MAX_BASE64_MB | 20 | 触发分批的保守大小阈值 |
PADDLEOCR_LOG_LEVEL | medium | low / medium / high |
结果结构
如果需要理解底层 JSON 包装格式,读取:
references/output_schema.md
故障排除
| 问题 | 解决方式 |
|---|---|
| 未配置 API | 先补 config/.env,再执行 uv run scripts/smoke_test.py --skip-api-test |
| 403 / Token 错误 | 更新 PADDLEOCR_ACCESS_TOKEN |
| 请求超时 | 调大 PADDLEOCR_DOC_PARSING_TIMEOUT,或减少页码范围 |
| 大 PDF 失败 | 使用 --pages 缩小范围,或让脚本自动分批 |
| Markdown 为空 | 到 archive/ 查看 batches/*.json 和 metadata.json,确认是否原文件质量过差 |
| 需要看原始坐标和表格结构 | 使用 scripts/layout_caller.py,并读取 result.result.layoutParsingResults[*].prunedResult |
整合路线图
本技能将与 mineru-ocr 整合为统一的 legal-ocr Skill,支持双后端(PaddleOCR + MinerU)、自动路由和法律后处理管线。
完整规划见 docs/ROADMAP_LEGAL_OCR.md。
维护建议
修改本技能后,同步更新:
TASKS.mdDECISIONS.mdCHANGELOG.md