Spreadsheet & Data Wrangling Master
提供完整的数据处理流程,涵盖清洗、转换、分析与自动化报告生成。
下载 27
支持PDF文本提取、合并、加密、OCR识别等15+项操作的多功能工具。
openclaw skills install @echodjx/docs-pdf命令、参数、文件名以原文为准
使用 Python 库和命令行工具进行 PDF 操作的完整指南。
一键查询所有支持的操作 —— 快速找到合适的工具。
| 你想做什么 | 命令 / 脚本 | 一行示例 |
|---|---|---|
| 📖 提取文本 | scripts/extract_text.py | python scripts/extract_text.py doc.pdf |
| 📊 提取表格 → Excel | scripts/extract_tables.py | python scripts/extract_tables.py report.pdf -o tables.xlsx |
| 🔗 合并 PDF | scripts/merge_pdfs.py | python scripts/merge_pdfs.py "*.pdf" -o merged.pdf |
| ✂️ 分割 PDF | scripts/split_pdf.py | python scripts/split_pdf.py big.pdf --each |
| 🔄 旋转页面 | scripts/batch_convert.py rotate | python scripts/batch_convert.py rotate input.pdf -d 90 |
| 🔀 重新排序页面 | scripts/reorder_pdf.py | python scripts/reorder_pdf.py input.pdf --order "3,1,2,4-" -o reordered.pdf |
| 💧 添加文字水印 | scripts/watermark.py | python scripts/watermark.py doc.pdf -t "CONFIDENTIAL" |
| 🖼️ 添加图片水印 | scripts/watermark.py | python scripts/watermark.py doc.pdf --image logo.png --alpha 0.3 |
| 🔒 加密 PDF | pypdf(内联) | 参见下方【密码保护】部分 |
| 📝 填写 PDF 表单 | scripts/fill_pdf_form.py | python scripts/fill_pdf_form.py form.pdf -o filled.pdf --set name="Alice" |
| 🔍 检查表单字段 | scripts/check_fillable_fields.py | python scripts/check_fillable_fields.py form.pdf |
| 🖼️ 对扫描版 PDF 进行 OCR | scripts/ocr_pdf.py | python scripts/ocr_pdf.py scan.pdf --lang eng |
| 📄 从零创建 PDF | reportlab(内联) | 参见 [references/create.md](references/create.md) |
| 📦 批量操作 | scripts/batch_convert.py | python scripts/batch_convert.py merge --help |
| 📏 压缩 / 优化 | scripts/compress_pdf.py | python scripts/compress_pdf.py input.pdf -o output.pdf --quality medium |
| ℹ️ 查看 PDF 信息 | scripts/pdf_info.py | python scripts/pdf_info.py input.pdf |
| 🖼️→📄 图片转 PDF | scripts/images_to_pdf.py | python scripts/images_to_pdf.py "photos/*.jpg" -o album.pdf --page-size A4 |
| 📄→🖼️ PDF 转图片 | scripts/pdf_to_images.py | python scripts/pdf_to_images.py input.pdf -o pages/ --format png --dpi 200 |
| 🔎 比较两个 PDF | scripts/compare_pdf.py | python scripts/compare_pdf.py old.pdf new.pdf -o diff_report.html |
| 🔧 修复损坏的 PDF | scripts/repair_pdf.py | python scripts/repair_pdf.py broken.pdf -o fixed.pdf |
| 🔤 列出字体 | scripts/list_fonts.py | python scripts/list_fonts.py input.pdf |
💡 任何脚本均可通过
--help查看全部可用选项。
你需要什么?
├── 从零创建新 PDF → reportlab (参见 references/create.md)
├── 提取文本 / 表格 → pdfplumber (参见 references/extract.md)
├── 合并 / 分割 / 旋转页面 → pypdf 或 qpdf CLI
├── 重新排序页面 → scripts/reorder_pdf.py
├── 添加水印 / 加密 / 保护 → pypdf
├── 填写 PDF 表单 → pdf-lib (JS) 或 pypdf (参见 FORMS.md)
├── 从 PDF 中提取图片 → pdfimages CLI 或 pypdf
├── 对扫描版 PDF 进行 OCR → pdf2image + pytesseract
├── 压缩 / 减小文件大小 → scripts/compress_pdf.py (qpdf + pypdf)
├── 查看 PDF 信息 / 元数据 → scripts/pdf_info.py
├── 图片转 PDF → scripts/images_to_pdf.py (reportlab)
├── PDF 转图片 → scripts/pdf_to_images.py (pdf2image)
├── 比较 / 差异分析两个 PDF → scripts/compare_pdf.py
├── 修复损坏的 PDF → scripts/repair_pdf.py (qpdf + pypdf)
└── 列出 PDF 中的字体 → scripts/list_fonts.py# Python 库
pip install pypdf pdfplumber reportlab pdf2image pytesseract Pillow --break-system-packages
# 系统工具
sudo apt-get install -y poppler-utils tesseract-ocr qpdf
# 中文 OCR 支持
sudo apt-get install -y tesseract-ocr-chi-sim tesseract-ocr-chi-tra
# Node.js(表单填写)
npm install pdf-lib# 系统工具(用于 OCR 和命令行操作)
brew install qpdf poppler tesseract
# 重要:非英文 OCR 需单独安装语言包
brew install tesseract-lang
# Python 库
pip install pypdf pdfplumber reportlab pdf2image pytesseract Pillow --break-system-packages
# Node.js(表单填写)
npm install pdf-lib⚠️ macOS 注意:
tesseract-lang必须单独安装,否则中文、日文等非英文 OCR 将失败。安装后运行tesseract --list-langs确认可用语言。
# 检查 Python 库
python3 -c "import pypdf, pdfplumber, reportlab, PIL; print('✓ Python libs OK')"
# 检查系统工具
which qpdf && echo "✓ qpdf OK" || echo "✗ qpdf not installed"
which tesseract && echo "✓ tesseract OK" || echo "✗ tesseract not installed"
which pdftotext && echo "✓ poppler OK" || echo "✗ poppler not installed"
# 检查 OCR 语言
tesseract --list-langs 2>/dev/null | head -5import pdfplumber
with pdfplumber.open("document.pdf") as pdf:
for page in pdf.pages:
print(page.extract_text())→ 有关高级提取选项,请参见 references/extract.md
import pdfplumber, pandas as pd
with pdfplumber.open("report.pdf") as pdf:
for page in pdf.pages:
for table in page.extract_tables():
df = pd.DataFrame(table[1:], columns=table[0])
print(df)from pypdf import PdfWriter, PdfReader
writer = PdfWriter()
for path in ["a.pdf", "b.pdf", "c.pdf"]:
writer.append(PdfReader(path))
with open("merged.pdf", "wb") as f:
writer.write(f)markdown
Version: 1.0.3
Chunk: 2/2
from pypdf import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
for i, page in enumerate(reader.pages):
w = PdfWriter()
w.add_page(page)
with open(f"page_{i+1}.pdf", "wb") as f:
w.write(f)reader = PdfReader("scan.pdf")
writer = PdfWriter()
for page in reader.pages:
page.rotate(90) # 支持 90 / 180 / 270
writer.add_page(page)
with open("rotated.pdf", "wb") as f:
writer.write(f)from pypdf import PdfReader, PdfWriter
reader = PdfReader("doc.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
writer.encrypt("user_pass", "owner_pass", use_128bit=False) # 使用 AES-256 加密
with open("encrypted.pdf", "wb") as f:
writer.write(f)# 合并文件
qpdf --empty --pages a.pdf b.pdf -- merged.pdf
# 提取第 1 到第 5 页
qpdf input.pdf --pages . 1-5 -- out.pdf
# 将所有页面旋转 90°
qpdf input.pdf output.pdf --rotate=+90
# 移除密码保护
qpdf --password=secret --decrypt locked.pdf unlocked.pdf
# 线性化(适用于网页优化)
qpdf --linearize input.pdf output.pdf直接使用这些脚本,无需重新编写:
| 脚本 | 用途 |
|---|---|
scripts/extract_text.py | 按页提取全部文本,输出为 .txt 文件 |
scripts/extract_tables.py | 提取所有表格,输出为 .xlsx 文件 |
scripts/merge_pdfs.py | 根据通配符模式合并多个 PDF |
scripts/split_pdf.py | 按页码范围拆分 PDF |
scripts/reorder_pdf.py | 重新排列页面(支持灵活语法:如 "3,1,2,4-") |
scripts/watermark.py | 添加文字或图片水印 |
scripts/ocr_pdf.py | 扫描件的完整 OCR 处理流程 |
scripts/batch_convert.py | 批量操作(合并、拆分、旋转等)命令行工具 |
scripts/check_fillable_fields.py | 列出 PDF 中的所有表单字段 |
scripts/fill_pdf_form.py | 程序化填充 AcroForm 表单字段 |
scripts/create_test_form.py | 生成用于测试的示例可填写 PDF 表单 |
scripts/compress_pdf.py | 压缩/优化 PDF 以减小文件大小 |
scripts/pdf_info.py | 查看 PDF 元数据、页数、加密状态、字体信息 |
scripts/images_to_pdf.py | 将图片(JPG/PNG 等)转换为 PDF |
scripts/pdf_to_images.py | 将 PDF 页面转换为 PNG/JPEG 图像 |
scripts/compare_pdf.py | 对比两个 PDF 并生成差异报告 |
scripts/repair_pdf.py | 尝试修复损坏的 PDF 文件 |
scripts/list_fonts.py | 列出 PDF 中使用的所有字体 |
运行任意脚本时,可通过 --help 查看其可用选项。
在需要深入指导时加载以下文件:
| 任务 | 推荐工具 | 关键方法 |
|---|---|---|
| 提取文本 | pdfplumber | page.extract_text() |
| 提取表格 | pdfplumber | page.extract_tables() |
| 合并 PDF | pypdf | writer.append() |
| 拆分 PDF | pypdf | 每页创建一个新 writer |
| 旋转页面 | pypdf | page.rotate(90) |
| 重新排序页面 | pypdf | writer.add_page(reader.pages[i]) |
| 创建 PDF | reportlab | Platypus 或 Canvas |
| 添加水印 | pypdf + reportlab | page.merge_page() |
| 加密 PDF | pypdf | writer.encrypt() |
| 填写表单 | pypdf / pdf-lib | 参见 FORMS.md |
| 扫描件 OCR | pytesseract | 参见 references/ocr.md |
| 压缩 PDF | qpdf + pypdf | compress_identical_objects() |
| 查看 PDF 信息 | pypdf | PdfReader 的元数据与字段 |
| 图片转 PDF | reportlab | canvas.drawImage() |
| PDF 转图片 | pdf2image | convert_from_path() |
| 对比 PDF | pdfplumber + difflib | 按页进行文本差异对比 |
| 修复 PDF | qpdf / pypdf | 使用 qpdf --linearize 或重写 |
| 列出字体 | pypdf | 从页面 /Resources → /Font 获取 |
| CLI 合并 | qpdf | --empty --pages |
| 提取图片 | pypdf / pdfimages | page.images |
<sub> / <super> XML 标签,否则可能显示为黑色方块extract_text() 会丢失布局信息;pdfplumber 支持布局感知PdfReader() 和 pdfplumber.open() 中传入 password=--break-system-packages 参数brew install tesseract 仅包含英文;非英文 OCR 需额外执行 brew install tesseract-langbrew install qpdf poppler tesseractpython scripts/create_test_form.py 生成测试表单pdfplumber(速度更快、更准确)python scripts/batch_convert.py rotate input.pdf -d 90| 场景 | 原因 | 替代方案 |
|---|---|---|
| 复杂排版 PDF(杂志、海报) | 提取会丢失格式布局 | 使用专业排版工具 |
| 扫描件中的表格提取 | OCR 表格识别精度有限 | 使用专业表格识别工具如 Camelot |
| CJK 字符的表单填充 | pypdf 内置字体不含 CJK | 使用 pdf-lib (JS),详见 FORMS.md |
| 超大 PDF (>500MB) | 内存可能不足 | 使用 qpdf CLI 或分批处理 |
已收录 1 个 Skill