4.2 pdf:PDF 全流程
它是什么
pdf 的触发条件是:用户想对 PDF 文件做任何事情时。这句话的覆盖面极大——读取、创建、合并、拆分、提取、填表、转换,都归它。
在 19 个官方技能里,pdf 属于“装了不一定天天用,但要用时没有就很痛苦”的类型。它和 4.1 的三件套一样是目录包形态,自带处理 PDF 的参考资料,装法也完全相同——浅克隆官方仓库,只复制 pdf 一个目录:
mkdir -p ~/.dsh/skills
git clone --depth 1 https://github.com/anthropics/skills.git /tmp/anthropic-skills
cp -r /tmp/anthropic-skills/skills/pdf ~/.dsh/skills/
复制完新开一个会话,/pdf 能直调即算装好。
PDF 为什么难缠
PDF 的设计目标是视觉保真,不是数据可读。它要保证同一份文件在任何设备上看起来一模一样,代价就是把“内容是什么”藏进了坐标和绘制指令里。这带来五个特有的坑:
| 坑 | 表现 | 后果 |
|---|---|---|
| 无结构 | 一页 PDF 可能只是一张大图 | 没有任何文本层可提取 |
| 文本流断裂 | 复制出来变成“今 天 天 气 很 好” | 句子被切成碎片,语序错乱 |
| 字体子集化 | 提取的文字缺字、乱码 | 连常用字都可能缺,编码映射对不上 |
| 表格无边界 | 看起来是表格,实际是一堆绝对坐标文本 | 分不清哪段文字属于哪列 |
| 表单域 | 填表要处理 AcroForm 字段 | 直接覆盖文本会破坏字段结构 |
前三个坑决定“能不能读到字”,后两个决定“读到之后能不能用”。一个合格的 PDF 技能必须逐个知道这些坑的存在,而不是把 PDF 当纯文本文件处理——那是新手最常犯的错:一个 read 下去,提出来一堆碎块,还以为文件坏了。
先判断类型,再决定路线
处理任何 PDF 之前,第一件事是判断它是文本型还是扫描型:
拿到一份 PDF
├─ 直接提取文本,结果有料 → 文本型 → 走文本处理路线
│ (提取、合并、拆分、填表都快)
└─ 提取结果为空、乱码或碎块 → 扫描型 → 先 OCR 再走文本路线
(OCR 有识别错误,重要数字要抽检)
一般做法就是先尝试直接提取文本:提得出大段连续文字,是文本型;提出来的为空、乱码或大量碎块,基本是扫描型,得先过 OCR。这一步判断错了,后面全错——把扫描件当文本型处理,你会得到一份空结果还以为文件坏了;把文本型当扫描型处理,白烧一轮 OCR,还平白引入识别错误。
这个判断最好让技能自动完成,但你在提示词里点一句“如果是扫描件先做 OCR”就有用,等于给路线选择加了保险。反过来,已经确定是扫描件时,明确告诉它“这份是扫描件,直接 OCR”,能省掉一轮无用的直接提取。
给提示词的三个通用技巧
不管哪个任务,下面三条能少踩一半坑:
| 技巧 | 为什么 |
|---|---|
| 明确输出格式(Markdown 表格 / JSON) | 让结果可直接进下一步,不被自由文本拖住 |
| 写明兜底(扫描件走 OCR) | 防止路线选错后整轮作废 |
| 要求“列出做了什么 / 填了哪些字段” | 交付前自检,当场发现漏项 |
典型任务
任务一:内容提取。
用 pdf 技能读取 contract.pdf,抽取所有条款编号与正文,
按编号整理成 Markdown 表格。如果是扫描件先做 OCR。
要点是给了输出格式(Markdown 表格)和兜底(扫描件走 OCR)——前者让结果可直接粘贴进文档,后者防路线选错。
任务二:合并与拆分。
用 pdf 技能把 reports/ 下 12 个月报按月份顺序合并成 annual.pdf,
每份报告前插入一页分隔页,页码连续。
合并类任务的坑全在细节里:顺序(按月份,不是按文件名排序)、分隔页、页码连续。这三件事不说,模型就会按默认行为做,出来一份能看但不能用的年报。
任务三:填表。
用 pdf 技能读取 form.pdf 的表单域列表,
把 applicant.json 里的值填进去,保存为 form-filled.pdf,
填完列出所有已填字段。
注意顺序:先“读取表单域列表”,再填。这正是对付 AcroForm 的正确姿势——字段名和数据源的键对不上时,先看字段清单再决定怎么映射,比盲目回填稳得多。最后“列出所有已填字段”是自查步骤,填完对一遍,能当场发现漏填。
三个任务分别对应三个高频场景:把存量 PDF 变成可编辑的数据、把多个 PDF 组装成一份、把数据填回表单。
和渲染 / 转 PDF 路线的配合
碰文档显示的技能有三个,分工明确:
| 需求 | 用谁 |
|---|---|
| 看某一页长什么样 | office-render(渲染文档图像、检查视觉布局) |
| 读页面里的文字和数据 | pdf(本技能) |
| 把 Office 文档转成 PDF | office-export-pdf |
一句话:要看样子用渲染,要拿数据用本技能,要生成 PDF 用转档技能。三者都是文件进、文件出(或图像出),可以随意串联。
与 office-export-pdf 的分工
dsh 自带技能里也有碰 PDF 的,方向和这个技能正好相反:
| 技能 | 方向 | 归属 |
|---|---|---|
office-export-pdf |
Office 文档 → PDF(产出) | dsh 自带(第二章) |
pdf |
对 PDF 做各种操作(处理) | Anthropic 官方(本章) |
office-export-pdf 用 LibreOffice 把 Word、Excel、PPT 转成 PDF,回答的是“怎么生成”;pdf 回答的是“拿到了怎么用”。需要“Word 转 PDF 再提取文字”就两步串联:先用 office-export-pdf 转出 PDF,再用 pdf 技能读取提取。两步之间是文件交接,提示词里写清中间文件名,别让模型猜。
顺便认个脸:19 个官方技能里的 canvas-design 也会产出 .pdf,但那是视觉艺术创作,不是文档处理,和这个技能不是一条路,别混。
常见失败与排查
| 现象 | 先查什么 |
|---|---|
| 提取出来是碎块或乱码 | 多半是扫描件,加 OCR 再试 |
| 表格提取成一团 | PDF 表格是坐标文本,要求按列重建,必要时转 CSV 再处理 |
| 填表后字段错位 | 先读表单域列表,确认字段名映射,别盲填 |
| 合并后页码不连续 | 合并参数里显式要求连续页码 |
小结
pdf覆盖 PDF 的读取、创建、合并、拆分、提取、填表,触发条件是“对 PDF 做任何事情”。- PDF 的核心难点是视觉保真带来的无结构与扫描件,动手前先判断类型再选路线。
- 三个典型任务:提取、合并、填表,提示词里写清输出格式和兜底。
- 与
office-export-pdf方向相反,可两步串联使用。
延伸阅读
- 本章其余小节:4.1 文档三件套、4.3 frontend-design
- 反向流程:2.5 office-export-pdf 与 office-render
- 技能基础:1.2 装到哪个目录
