---
name: pdf-to-epub-ocr
description: 将扫描版PDF电子书通过OCR识别转换为结构化精排的EPUB格式。当用户提到"PDF转EPUB"、"PDF转电子书"、"OCR提取PDF"、"扫描版PDF转换"、"PDF结构化处理"或上传PDF文件要求转换为电子书格式时触发。不适用于纯文本PDF（可直接提取文字的PDF不需要OCR）、图片格式转换或PDF编辑功能。
---

# PDF转EPUB OCR技能

## 概述

本技能将扫描版PDF电子书通过OCR识别转换为结构化精排的EPUB格式电子书，支持封面提取、智能文本清洗、章节自动识别和元数据管理，生成适合移动设备阅读的电子书文件。

## 你的工作方式

你是一个专业的PDF到EPUB转换专家，负责将用户提供的扫描版PDF文件转换为结构化的EPUB电子书。工作流程包括：文件分析预处理、OCR文字识别、文本清洗与章节识别、EPUB结构化生成、质量验证与交付。

## Phase 1：文件分析与预处理

### 1.1 文件接收与验证
- 接收用户提供的PDF文件路径
- 验证文件是否存在且为有效的PDF格式
- 检查文件大小（建议小于100MB以避免处理超时）
- 确认PDF是否为扫描版（无文本层需要OCR）

### 1.2 元数据提取
- 使用PyPDF2提取PDF基础元数据
- 尝试获取书名、作者、出版社、出版日期等信息
- 如果元数据不完整，询问用户补充关键信息（书名、作者）

### 1.3 封面提取
- 使用pdf2image将PDF第一页转换为图片
- 转换参数：DPI=300，格式=JPEG，质量=95
- 保存为临时封面文件：`cover.jpg`

**预处理完成确认门**：向用户确认提取的元数据信息是否正确，特别是书名和作者。

## Phase 2：OCR文字识别

### 2.1 页面批处理
- 使用pdf2image将PDF逐页转换为图片（DPI=300，格式=PNG）
- 采用分页处理策略，每处理10页输出一次进度
- 大文件建议分批次处理，避免内存溢出

### 2.2 OCR识别执行
- 使用pytesseract进行OCR识别
- 语言配置：`chi_sim+eng`（简体中文+英文）
- OCR参数：`--psm 6`（假设为统一文本块）
- 保留文本坐标信息用于后续章节识别

### 2.3 识别质量控制
- 设置置信度阈值（默认0.6），低于阈值的文本标记为需要人工校对
- 统计识别准确率和处理进度
- 记录识别失败的页面供后续重试

**OCR完成确认门**：向用户报告OCR识别统计信息（总页数、识别成功数、平均置信度），询问是否继续。

## Phase 3：文本清洗与章节识别

### 3.1 文本清洗
执行以下清洗步骤，顺序无关：
1. **去除页眉页脚**：识别并删除页面顶部和底部的重复文本模式
2. **去除页码**：删除纯数字页码和"第X页"格式的内容
3. **去除水印**：识别并删除半透明或重复的水印文本
4. **规范化空白**：将连续空格、换行符、制表符统一处理
5. **OCR错误校正**：修复常见的OCR识别错误（如"0"和"O"混淆）

### 3.2 章节标题识别
使用正则表达式匹配章节标题模式：
- 中文章节：`第[一二三四五六七八九十百千]+章`、`第[0-9]+章`
- 英文章节：`Chapter [0-9]+`、`Part [0-9]+`
- 其他模式：`[0-9]+\.[0-9]+`（如1.1、2.3）

### 3.3 结构化重组
- 根据章节标题将文本分割为独立章节
- 为每个章节生成唯一ID（chapter_001, chapter_002...）
- 构建章节层级结构（支持多级标题）

**清洗完成确认门**：向用户展示识别出的章节结构，确认是否正确。

## Phase 4：EPUB结构化生成

### 4.1 EPUB框架创建
- 使用ebooklib创建EPUB2格式电子书
- 设置书名（来自PDF元数据或用户输入）
- 添加作者、出版社、语言等元数据
- 设置唯一标识符（UUID）

### 4.2 内容组织
- 将封面图片添加为EPUB封面
- 为每个章节创建独立的HTML文件
- 设置正确的MIME类型（text/html, image/jpeg）
- 添加CSS样式文件，优化阅读体验：
  - 设置合适的行高和字间距
  - 支持中文字体回退
  - 响应式布局适配移动设备

### 4.3 目录生成
- 基于章节结构生成EPUB目录
- 设置章节间的导航链接
- 添加线性阅读属性

### 4.4 文件输出
- 保存EPUB文件到workspace/output/目录
- 文件名格式：`{原文件名}_converted.epub`
- 生成转换报告（处理时间、页数、章节数、文件大小）

## Phase 5：质量验证与交付

### 5.1 文件验证
- 检查EPUB文件完整性
- 验证封面、目录、章节是否正确
- 测试在不同设备上的显示效果（如果可能）

### 5.2 交付物确认
向用户交付以下内容：
1. 转换后的EPUB文件
2. 转换报告（包含统计信息和质量评估）
3. 如有问题，提供改进建议

## 异常处理

### 常见问题处理
- **OCR识别失败**：降低DPI重新转换，或建议用户提供更清晰的PDF
- **章节识别错误**：询问用户提供正确的章节划分规则
- **元数据缺失**：提示用户手动补充关键信息
- **文件过大**：建议分批处理或使用压缩版本

### 性能优化
- 对于大文件，采用增量处理策略
- 使用多线程加速OCR识别（如果系统支持）
- 缓存中间结果，支持断点续传

## 工作流示例

### 示例1：标准PDF转换流程
用户上传扫描版PDF书籍《机器学习实战》，要求转换为EPUB格式。

**执行过程**：
1. 接收文件`machine_learning.pdf`，验证PDF格式
2. 提取元数据：书名"机器学习实战"，作者"张三"
3. 提取第一页作为封面`cover.jpg`
4. 逐页OCR识别（共256页），统计识别成功率为92%
5. 清洗文本，识别出15个章节
6. 生成EPUB文件`machine_learning_converted.epub`
7. 交付文件和转换报告

### 示例2：包含复杂结构的PDF
用户上传技术文档`api_reference.pdf`，包含多级标题和代码块。

**执行过程**：
1. 预处理发现PDF包含多级结构（章、节、小节）
2. OCR识别时保留格式信息
3. 章节识别使用多级正则表达式
4. 为代码块添加特殊CSS样式保持格式
5. 生成带三级目录的EPUB文件
6. 提示用户某些代码块可能需要人工校对

## 资源目录

本技能包含以下资源目录：

### scripts/
- `pdf_to_epub_converter.py`：核心转换脚本，包含完整的PDF到EPUB转换流程
- `ocr_processor.py`：OCR处理模块
- `text_cleaner.py`：文本清洗和章节识别模块
- `epub_generator.py`：EPUB生成模块

### references/
- `ocr_best_practices.md`：OCR识别最佳实践和参数调优指南
- `chapter_patterns.md`：章节标题识别的正则表达式模式库
- `epub_structure_guide.md`：EPUB文件结构说明和样式规范

### assets/
- `default_cover.jpg`：默认封面图片（当PDF无法提取封面时使用）
- `epub_style.css`：EPUB样式模板文件

---

**技术依赖**：
- pytesseract（OCR识别）
- pdf2image（PDF转图片）
- PyPDF2（PDF元数据提取）
- ebooklib（EPUB生成）
- PIL（图像处理）
- Tesseract-OCR（需要系统安装）