P

PDF与图片文字提取

作者:鹿Sir办公效率v1

从 PDF、扫描文档和图片中可靠恢复可读文字与版面结构。自动区分原生文本 PDF、扫描型 PDF 与混合型 PDF,优先使用高保真的文本层解析,在低文字密度、异常编码或扫描页面时切换视觉识别;支持分页、段落、标题、列表、表格、页眉页脚、关键数字、置信风险和结果校验,按用户需要输出原文转写、结构化 Markdown、纯文本或可保存文件。适用于合同、论文、票据、表单、截图、扫描件、书页和多页资料。

下载量
384
点赞
93
价格
免费

技能文档

---
name: document-vision-text-recovery
slug: document-vision-text-recovery
version: 1.0.0
displayName: PDF和图片文字提取
description: 从 PDF、扫描文档和图片中可靠恢复可读文字与版面结构。自动区分原生文本 PDF、扫描型 PDF 与混合型 PDF,优先使用高保真的文本层解析,在低文字密度、异常编码或扫描页面时切换视觉识别;支持分页、段落、标题、列表、表格、页眉页脚、关键数字、置信风险和结果校验,按用户需要输出原文转写、结构化 Markdown、纯文本或可保存文件。适用于合同、论文、票据、表单、截图、扫描件、书页和多页资料。
category: 办公效率
dependency:
  python:
    - pymupdf>=1.24.0
title: PDF与图片文字提取
---
# PDF和图片文字提取

## 1. 核心定位

本 Skill 的目标不是“把看到的字随便抄下来”,而是**尽可能保真地恢复文档中的文字、阅读顺序和结构,并对高风险内容进行针对性复核**。

处理对象包括:

- 单张图片:PNG、JPG/JPEG、WEBP、BMP、TIFF、GIF 等常见格式。
- PDF:原生文字 PDF、扫描型 PDF、文字与扫描混合型 PDF。
- 典型文档:合同、论文、报告、发票/票据、表单、证件、书籍页面、网页截图、聊天截图、宣传图。

默认原则:

1. **先判断文档类型,再选择识别路径。**
2. **原生 PDF 优先直接提取文本层,视觉识别作为补救,而不是默认替代。**
3. **扫描页必须经过视觉/OCR 路径,不能把“文本层为空”误判为“页面没有文字”。**
4. **保持阅读顺序与结构优先于制造漂亮 Markdown。**
5. **不确定的字符宁可标记风险,也不要伪装成确定结果。**
6. **关键数字、代码、编号、金额和表格数据要采用更严格的复核策略。**

---

## 2. 任务识别

收到文件后,先判断用户真正需要的输出类型:


| 用户意图                   | 默认动作                                  |
| -------------------------- | ----------------------------------------- |
| “提取文字”               | 完整转写,尽量保持结构                    |
| “把 PDF 转成文字”        | 全文提取,分页保留                        |
| “识别图片里的内容”       | 视觉识别后按阅读顺序输出                  |
| “只要正文”               | 去除明显页眉、页脚、装饰元素,正文优先    |
| “只提取表格”             | 单独恢复表格,不把单元格拼成一段文字      |
| “提取关键数字/编号”      | 只返回目标字段,并进行二次复核            |
| “保存为 Markdown/TXT”    | 先完成识别与校验,再生成文件              |
| “告诉我这份文件写了什么” | 识别后进入摘要/问答流程,而非机械全文输出 |

如果用户没有指定范围,对单个文件默认处理全部页面;对超长文件可以先建立页面级诊断,再分批恢复全文。

---

## 3. 技能工作流(总体决策流程)

### 阶段 A:文件与页面诊断

对 PDF:

1. 获取页数、页面尺寸、元数据和加密状态。
2. 对每页计算文字层信息,例如字符数、文字块数、图片数量、页内文字面积占比等。
3. 将页面归类为:
   - `native-text`:有可靠文本层;
   - `scanned`:几乎无文本层但存在页面图像;
   - `mixed`:同时存在文本层和图片内容;
   - `suspicious`:文本层异常,如字符乱码、编码异常、字符极少但页面明显有内容。
4. 仅针对需要识别的页面触发视觉/OCR,不要无脑把整本 PDF 全部栅格化。

对图片:

1. 检查分辨率、方向、透明背景、是否明显倾斜、是否存在复杂背景。
2. 判断是否存在文字区域以及可能的阅读方向。

### 阶段 B:选择识别路径

**原生 PDF** → 文本层提取 → 结构恢复 → 风险检测 → 必要时局部视觉复核。

**扫描 PDF** → 页面渲染 → 视觉/OCR → 结构恢复 → 风险检测 → 关键区域复核。

**混合 PDF** → 文本层 + 页面图像联合判断。对文本层缺失或明显与视觉内容不一致的区域进行补识别。

**图片** → 视觉识别 → 阅读顺序恢复 → 关键内容复核。

---

## 4. PDF 原生文本恢复规范

### 4.1 不可使用的简化逻辑

禁止仅凭以下单一条件判断标题或段落:

- “字体 > 16 就是标题”;
- “加粗就是标题”;
- “每个 TextBlock 都是一段”;
- “每页只需按 API 返回顺序拼接”。

这些特征只能作为候选信号。

### 4.2 推荐恢复策略

优先获取:

- span 文本、字体、字号、粗体/斜体信息;
- block / line / span 的坐标;
- 文本块边界;
- 页面的阅读方向与列结构。

恢复时综合判断:

- X/Y 坐标连续性;
- 相邻行间距;
- 左边界是否一致;
- 字号相对正文的差异;
- 粗体、全大写、编号模式;
- 前后内容是否形成标题—正文层级;
- 两栏/多栏情况下的列顺序。

目标是恢复“**可读的原文结构**”,而不是臆造原 PDF 的排版源文件。

### 4.3 空格与换行

不要对每个 span 直接 `.strip()` 后再机械连接。

应根据:

- span 间 X 坐标间距;
- 原始文本中的空格;
- 中文连续字符;
- 英文单词边界;
- 标点位置;
- 行尾连字符;
  判断是否需要插入空格或换行。

中文正文通常不应在每个 span 之间强行加入空格。

### 4.4 多栏页面

检测同页多个明显的 X 坐标簇。若存在双栏或多栏,应按“栏 → 从上到下”的顺序阅读,而不是简单按照内部对象顺序拼接。

---

## 5. 扫描 PDF 与图片识别规范

### 5.1 OCR/视觉识别不是“最后一句话”

只要页面文字层为空、极少,或疑似乱码,就必须考虑视觉路径。

可使用当前环境中可用的视觉/OCR能力。若存在图像理解工具,应优先直接让模型读取页面图像;若需要程序辅助,可使用 `scripts/pdf_page_probe.py` 渲染指定页面。

### 5.2 图像识别提示要求

识别时应明确要求:

- 读取全部可见文字,而不是只读标题;
- 保持自然阅读顺序;
- 区分标题、正文、列表、表格、脚注、页眉页脚;
- 保留原文标点、大小写、数字、小数点、百分号、货币符号;
- 不猜测被遮挡或不可辨识字符;
- 对模糊位置使用 `[?]` 或 `[无法辨认]`,不要凭常识补全;
- 表格必须按行列关系恢复;
- 对旋转文字、竖排文字、边缘文字单独注意。

### 5.3 图片质量不足时

先判断是否值得预处理:

- 旋转/方向矫正;
- 适度放大;
- 灰度化/对比度增强;
- 局部裁剪;
- 对倾斜页面做纠偏。

不要无限尝试“美化图片”。当原始像素已经不足时,应明确保留不确定性。

---

## 6. 结构恢复规则

输出结构优先级:

`标题 > 段落 > 列表 > 表格 > 引用/注释 > 页眉页脚 > 装饰元素`

### 标题

标题判断需要结合多个信号。建议使用:

- 相对字号;
- 粗体/字重;
- 独立成行;
- 前后留白;
- 编号模式,如 `1.`、`1.1`、`(一)`;
- 与正文的语义关系。

仅在证据充分时才提升为 Markdown 标题;证据不足时保持普通文本。

### 列表

识别:

- `•`、`-`、`*`;
- `1.`、`2.`;
- `a)`、`b)`;
- `(1)`、`(2)`;
- 中文序号。

保留原有编号,不要自动重编号。

### 表格

表格是高风险区域。若能可靠恢复,应输出 Markdown 表格或结构化数据;若列边界不确定,不要凭空移动单元格。

推荐策略:

1. 先识别表头;
2. 判断行列边界;
3. 对合并单元格保留语义;
4. 逐行校验数字;
5. 无法可靠恢复时,退化为“按行转写”,并说明布局可能存在损失。

### 页眉页脚

跨页面重复出现、位置固定、字号较小的文本,可判为候选页眉/页脚。只有在重复性足够明显时才折叠;不要误删正文中的重复句子。

---

## 7. 高风险内容复核

必须重点复核:

- 日期;
- 金额、税率、百分比;
- 电话号码;
- 订单号、合同号、票据号;
- 身份/证件编号;
- 银行账号或其他长数字串;
- 邮箱、URL;
- 型号、版本号、程序代码;
- 表格中的数字字段。

### 复核原则

第一轮:按正常版面识别。

第二轮:针对高风险片段做局部独立复核,优先查看原图对应区域。

第三轮仅在必要时执行:当两次结果冲突,或结果与上下文存在明显矛盾。

不得因为“常识上应该是某个数字”而强行覆盖视觉证据。

### 不确定结果

优先使用:

- `[?]`:单字符不确定;
- `[无法辨认]`:整段无法可靠读取;
- `[候选:A / B]`:存在少量明确候选。

不要把未知字符替换成看似合理的字符。

---

## 8. 输出模式

根据用户需求选择一种主输出模式:

### A. 保真转写

适用于“逐字提取”“完整 OCR”。

- 尽量忠实;
- 分页;
- 不主动摘要;
- 保留可确定的格式信息。

### B. 结构化 Markdown

适用于阅读与后续编辑。

- 页面标题;
- 标题层级;
- 段落;
- 列表;
- 表格;
- 必要时保留页码标记。

### C. 纯文本

适用于复制到其他程序。

- 删除 Markdown 标记;
- 保留自然段与基本换行。

### D. 数据抽取

适用于只要字段、数字或表格。

- 只输出目标信息;
- 不混入长篇 OCR 原文;
- 对字段做二次校验。

### E. 文件输出

用户要求保存时才创建 `.md`、`.txt` 或其他明确格式;文件生成前先完成识别与校验。

---

## 9. 页面级状态与异常处理

每页在内部可标记:

- `OK_NATIVE`:文本层稳定;
- `OK_VISION`:视觉识别稳定;
- `MIXED`:文本层与视觉内容联合恢复;
- `LOW_CONFIDENCE`:存在明显不确定内容;
- `NEEDS_REVIEW`:关键字段发生冲突;
- `EMPTY_PAGE`:确认为空白页;
- `FAILED`:页面无法可靠读取。

最终回复不必展示全部内部状态,但当识别存在明显损失时,应简洁告知用户影响范围,例如“第 7 页表格列界线不清,数字字段存在少量不确定项”。

### 加密/受限 PDF

遇到密码保护、损坏、无法解析或权限受限:

1. 明确说明是哪一类问题;
2. 不伪造提取结果;
3. 如果用户能提供解锁后的文件,再继续处理。

---

## 10. 大文件策略

对于超长 PDF:

1. 先读取页数与页面诊断信息;
2. 只对需要视觉识别的页面进行渲染;
3. 分批处理,不要一次把整本文档全部塞入上下文;
4. 每批完成后记录页码范围;
5. 最终按原页序合并。

默认优先保证准确率,而不是追求一次性处理完所有页面。

---

## 11. 质量控制清单

在提交最终结果前,内部检查:

- [ ]  页数是否与源文件一致;
- [ ]  是否漏掉低文字密度页面;
- [ ]  扫描页是否走视觉/OCR 路径;
- [ ]  多栏页面阅读顺序是否合理;
- [ ]  标题是否存在明显误判;
- [ ]  段落和换行是否自然;
- [ ]  表格是否发生列错位;
- [ ]  高风险数字是否复核;
- [ ]  不确定字符是否明确标记;
- [ ]  是否错误添加了原文没有的内容;
- [ ]  用户要求的是全文、正文、字段还是摘要,是否匹配;
- [ ]  生成文件后是否能正常打开并包含完整内容。

---

## 12. 推荐操作模板

### 图片

> 读取整张图片中的所有可见文字,按自然阅读顺序恢复。保留标题、正文、列表、表格、注释和关键数字。不要猜测模糊字符;不确定处标记 `[?]`。若存在表格,优先恢复行列关系。

### PDF 原生文本页

> 优先使用 PDF 文本层。根据坐标、行距、字号、字重和列结构恢复自然阅读顺序;不要简单按对象顺序拼接,也不要仅凭字号判定标题。

### 扫描 PDF 页

> 将页面视为图像进行完整视觉识别。保持自然阅读顺序,识别标题、段落、列表、表格、脚注和页眉页脚。关键数字与编号进行局部复核。

---

## 13. 资源

- `scripts/pdf_page_probe.py`:PDF 诊断、页面文字统计、页面图像渲染及可选图片提取辅助脚本。
- `README.md`:安装、调用与能力说明。

---

## 14. 设计边界

本 Skill 不承诺“100% OCR 正确”。正确做法是:**能确认的准确输出;不能确认的明确标记;关键内容额外复核;无法恢复的版面诚实说明。**

不要把模型推测、语义补全或常识纠错伪装成源文件原文。

使用说明

# 文档视觉文字精炼器

**Document Vision Text Recovery · v2.0.0**

一个面向 PDF、扫描件和图片文字恢复的通用 Skill。它不把所有文件都当成“普通 OCR”,而是先判断页面类型,再选择最合适的提取路径。

## 主要能力

- 原生 PDF 文本层提取
- 扫描型 PDF 的页面渲染与视觉/OCR 回退
- 混合 PDF 联合恢复
- 中文、英文、数字及常见符号识别
- 标题、段落、列表、表格和页眉页脚的结构恢复
- 多栏阅读顺序处理
- 金额、日期、编号、代码等高风险内容二次复核
- 不确定字符显式标记
- 输出为保真转写、Markdown、纯文本或字段数据
- 超长 PDF 分批处理
- 页面级异常诊断

## 依赖

```bash
pip install 'pymupdf>=1.24.0'
```

本 Skill 的 PDF 辅助脚本不依赖外部 OCR 服务。扫描页的真正 OCR/视觉识别由当前运行环境可用的视觉或 OCR 能力完成。

## PDF 页面诊断

```bash
python scripts/pdf_page_probe.py document.pdf
```

渲染指定页面:

```bash
python scripts/pdf_page_probe.py document.pdf --pages 2,5-7 --render-dir ./rendered --dpi 180
```

输出会告诉你每页更接近原生文本、扫描页、混合页还是可疑页,并可生成后续视觉识别所需的 PNG。

## 设计原则

1. 能从 PDF 文本层可靠提取时,不做多余 OCR。
2. 文本层为空不等于页面没有文字。
3. 不依赖单一字号阈值猜标题。
4. 不通过常识“修正”看不清的原文。

如何安装此技能?

访问技能市场,点击「安装」按钮,按提示将技能包放入 AI 编程助手的 skills 目录即可。

浏览技能市场

支持平台:Qoder · QoderWork · Claude · Codex 等 AI 编程助手