1实现原理 · 为什么它能做到
文档分层路由:SKILL.md 只放常用配方与『下一步』指针,高级库/JS 用法放 REFERENCE.md,表单填充的完整闭环放 FORMS.md——三份文档按任务分工。
For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions.
常规 PDF 操作=python 库 + CLI 双轨,均为本地执行:pypdf(结构操作)、pdfplumber(文本/表格)、reportlab(创建)、pdftotext/qpdf/pdftk/pdfimages(CLI 捷径)。
This guide covers essential PDF processing operations using Python libraries and command-line tools.
表单填充是重头戏并区分两种形态:可填表单(fillable,直接写字段)与不可填表单(无字段→叠加 FreeText 文本批注),后者优先走『结构提取坐标』、失败才退化为目测估算。
If the PDF doesn't have fillable form fields, you'll add text annotations. First try to extract coordinates from the PDF structure (more accurate), then fall back to visual estimation if needed.
填充前有强制门禁:check_bounding_boxes.py 校验相交框与过小字框;填充后强制转图目检文字位置——坐标转换错误在交付前被发现。
**Always validate bounding boxes before filling:**
坐标体系自洽转换:forms.md 规定 PDF 坐标(y=0 在页面顶部向下增),fields.json 带 pdf_width/pdf_height 或 image 尺寸信号,填充脚本自动探测坐标系统并换算。
The fill script auto-detects the coordinate system and handles conversion:
扫描件 OCR 与『可搜索化』只覆盖到文本抽取层:示例经 pdf2image→pytesseract 把每页 OCR 文本拼出来,未提供生成带文本层 PDF 的直接脚本。
Requires: pip install pytesseract pdf2image
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| package | pypdf(读写/合并/旋转/加密/字段) |
| package | pdfplumber(文本/表格坐标级抽取) |
| package | reportlab(创建 PDF) |
| cli | pdftotext(poppler-utils) |
| cli | qpdf(合并/拆分/旋转/修复/加密) |
| cli | pdftk(若可用)与 pdfimages(poppler,抽图) |
| package | pytesseract + pdf2image(OCR,按需安装) |
| package | pypdfium2 / pdf-lib(JS) / pdfjs-dist(JS)(高级参考章节) |
4风险提醒 风险提醒:蓝色 · 知晓即可
- 『可搜索化』宣称超出正文实现 — OCR 只到文本抽取层;要做真正的可搜索 PDF(文本层/OCR 索引)需宿主自行补步骤。
- 不可信 PDF 解析暴露面 — 无缓解层(对比 docx 有删 symlink/XSD 指引);恶意 PDF 的处理安全取决于 pypdf/pdfplumber 版本与宿主沙箱。
- 坐标填写易错 — fields.json 坐标错误会叠字错位;虽有 check_bounding_boxes 门禁,视觉目检仍是最后防线(依赖模型看图质量)。
- 专有许可 — LICENSE.txt 为 Anthropic 服务条款式专有许可(含 ADDITIONAL RESTRICTIONS),商用/再分发需审阅。
- CLI 可用性依赖环境 — pdftk 标注 'if available'、pdftotext/qpdf 依赖 poppler 安装;缺 CLI 时部分能力退化。
5第二遍独立确认
- [ok] 填表工作流引用脚本全部存在 — forms.md 各步骤命令行(extract_form_structure/check_bounding_boxes/fill_pdf_form_with_annotations/convert_pdf_to_images/check_fillable_fields)与 scripts/ 文件一一对应。
- [discrepancy] OCR『make them searchable』宣称 vs 实现 — description 声称 OCR 使扫描件可搜索,但 SKILL.md 'Extract Text from Scanned PDFs' 示例只把 pytesseract 文本拼进字符串打印/汇总;生成带文本层的可搜索 PDF 没有脚本或配方,需宿主自行组合。属轻微措辞超前(抽取是搜索化的前置),已在 risks 标注。
- [ok] 库依赖与 import 一致 — 脚本实际 import pypdf/pdfplumber/PIL/pdf2image,与依赖清单一致;无隐藏第三方。
- [ok] 网络/凭证零命中 — token 扫描(url/requests/urllib/env/token/secret/key)零命中;无配置文件读取。
- [ok] 坐标转换逻辑存在 — fill_pdf_form_with_annotations.py 有 transform_from_image_coords 函数,forms.md 双坐标系说明与之配套。
- [ok] 元数据与资产核对 — 本地 HEAD==pin;LICENSE.txt 专有条款与 frontmatter 'Proprietary' 一致;REFERENCE.md/forms.md 行数与结构如述。
6结论
8a9ce019ed1b048d…41bbe19d1a