Install
openclaw skills install @alex-ht/pdf-extractionExtract text, tables, and metadata from PDFs. Auto-detects native text vs scanned image pages and routes to pdfplumber or Tesseract OCR.
openclaw skills install @alex-ht/pdf-extractionExtract content from PDFs without deciding whether each page is selectable text or a scan.
| Page type | Tool |
|---|---|
| Native text | pdfplumber (text + tables) |
| Scanned / image | PyMuPDF + Tesseract OCR |
# System OCR engine (required for scanned pages)
# Ubuntu/Debian:
sudo apt install tesseract-ocr tesseract-ocr-eng
# Optional Traditional Chinese:
# sudo apt install tesseract-ocr-chi-tra
# CLI (from this skill folder)
pip install -e .
# or: python3 -m pip install -e .
# Auto-detect text vs OCR per page → print text
pdf-extract document.pdf
# Write to file
pdf-extract document.pdf -o out.txt
# See which mode each page will use
pdf-extract document.pdf --analyze-only
# Tables + Markdown
pdf-extract document.pdf --tables --format markdown -o out.md
# JSON (includes per-page mode)
pdf-extract document.pdf --format json -o out.json
# Force mode
pdf-extract scan.pdf --mode ocr --ocr-lang eng
pdf-extract text.pdf --mode text
# Page range
pdf-extract doc.pdf --pages 1-3,5
# Also: python -m pdf_extract document.pdf
For each page (--mode auto, default):
Tune with --min-text-chars. Override with --mode text or --mode ocr.
When the user provides a PDF and wants content extracted:
pdf-extract <file> (auto mode). Do not ask whether it is text or scanned.--analyze-only if you only need routing diagnostics.--tables when tables matter (works best on native-text pages).--ocr-lang eng+chi_tra if chi_tra is installed.| Flag | Meaning |
|---|---|
-o, --output | Write to file (default stdout) |
-f, --format | text | json | markdown |
--mode | auto | text | ocr |
--pages | e.g. 1-3,5 |
--tables | Extract tables on text pages |
--layout | Preserve native text layout |
--meta | Include PDF metadata |
--ocr-lang | Tesseract langs (default eng) |
--ocr-dpi | OCR render DPI (default 200) |
--analyze-only | Classification JSON only |
-q, --quiet | Suppress progress on stderr |
pdfplumber, pymupdf, Pillow (see pyproject.toml)tesseract (and language packs as needed)