ClawSkills logoClawSkills

PDF Text Extractor

借助 OCR 支持从 PDF 中提取文本。非常适合数字化文档、处理发票或分析内容。无需任何依赖。

介绍

# PDF-Text-Extractor - Extract Text from PDFs

**Vernox 实用技能 - 非常适合文档数字化。**

## 概述

PDF-Text-Extractor 是一个零依赖的 PDF 文件文本内容提取工具。支持嵌入文本提取(适用于基于文本的 PDF)和 OCR(适用于扫描文档)。

## 功能

### ✅ 文本提取 - 无需外部工具即可从 PDF 中提取文本 - 支持基于文本和扫描的 PDF - 保留文档结构和格式 - 快速提取(基于文本的 PDF 仅需毫秒级)

### ✅ OCR 支持 - 使用 Tesseract.js 处理扫描文档 - 支持多种语言(英语、西班牙语、法语、德语) - 可配置的 OCR 质量/速度 - 尽可能回退到文本提取

### ✅ 批处理 - 一次处理多个 PDF - 用于文档工作流的批量提取 - 大文件进度跟踪 - 错误处理和重试逻辑

### ✅ 输出选项 - 纯文本输出 - 带元数据的 JSON 输出 - Markdown 转换 - HTML 输出(保留链接)

### ✅ 实用功能 - 逐页提取 - 字符/单词计数 - 语言检测 - 元数据提取(作者、标题、创建日期)

## 安装

```bash clawhub install pdf-text-extractor ```

## 快速开始

### 从 PDF 提取文本

```javascript const result = await extractText({ pdfPath: './document.pdf', options: { outputFormat: 'text', ocr: true, language: 'eng' } });

console.log(result.text); console.log(`Pages: ${result.pages}`); console.log(`Words: ${result.wordCount}`); ```

### 批量提取多个 PDF

```javascript const results = await extractBatch({ pdfFiles: [ './document1.pdf', './document2.pdf', './document3.pdf' ], options: { outputFormat: 'json', ocr: true } });

console.log(`Extracted ${results.length} PDFs`); ```

### 使用 OCR 提取

```javascript const result = await extractText({ pdfPath: './scanned-document.pdf', options: { ocr: true, language: 'eng', ocrQuality: 'high' } });

// OCR will be used (scanned document detected) ```

## 工具函数

### `extractText` 从单个 PDF 文件中提取文本内容。

**参数:** - `pdfPath` (string, required): PDF 文件路径 - `options` (object, optional): 提取选项 - `outputFormat` (string): 'text' | 'json' | 'markdown' | 'html' - `ocr` (boolean): 对扫描文档启用 OCR - `language` (string): OCR 语言代码 ('eng', 'spa', 'fra', 'deu') - `preserveFormatting` (boolean): 保留标题/结构 - `minConfidence` (number): 最小 OCR 置信度分数 (0-100)

**返回值:** - `text` (string): 提取的文本内容 - `pages` (number): 处理的页数 - `wordCount` (number): 总单词数 - `charCount` (number): 总字符数 - `language` (string): 检测到的语言 - `metadata` (object): PDF 元数据(标题、作者、创建日期) - `method` (string): 'text' 或 'ocr'(提取方法)

### `extractBatch` 一次从多个 PDF 文件中提取文本。

**参数:** - `pdfFiles` (array, required): PDF 文件路径数组 - `options` (object, optional): 与 extractText 相同

**返回值:** - `results` (array): 提取结果数组 - `totalPages` (number): 所有 PDF 的总页数 - `successCount` (number): 成功提取的数量 - `failureCount` (number): 提取失败的数量 - `errors` (array): 失败的详细信息

### `countWords` 计算提取文本中的单词数。

**参数:** - `text` (string, required): 要计数的文本 - `options` (object, optional): - `minWordLength` (number): 每个单词的最少字符数(默认:3) - `excludeNumbers` (boolean): 不将数字计为单词 - `countByPage` (boolean): 返回每页的单词数

**返回值:** - `wordCount` (number): 总单词数 - `charCount` (number): 总字符数 - `pageCounts` (array): 每页的单词数 - `averageWordsPerPage` (number): 每页平均单词数

### `detectLanguage` 检测提取文本的语言。

**参数:** - `text` (string, required): 要分析的文本 - `minConfidence` (number): 检测的最小置信度

**返回值:** - `language` (string): 检测到的语言代码 - `languageName` (string): 完整语言名称 - `confidence` (number): 置信度分数 (0-100)

## 使用场景

### 文档数字化 - 将纸质文档转换为数字文本 - 处理发票和收据 - 数字化合同和协议 - 归档物理文档

### 内容分析 - 为分析工具提取文本 - 为 LLM 处理准备内容 - 清理扫描文档 - 解析基于 PDF 的报告

### 数据提取 - 从 PDF 报告中提取数据 - 从 PDF 解析表格 - 提取结构化数据 - 自动化文档工作流

### 文本处理 - 为翻译准备内容 - 清理 OCR 输出 - 提取特定部分 - 在 PDF 内容中搜索

## 性能

### 基于文本的 PDF - **速度:** 10 页 PDF 约 100ms - **准确率:** 100%(精确文本) - **内存:** 典型文档约 10MB

### OCR 处理 - **速度:** 每页约 1-3s(高质量) - **准确率:** 85-95%(取决于扫描质量) - **内存:** OCR 期间峰值约 50-100MB

## 技术细节

### PDF 解析 - 使用原生 PDF.js 库 - 直接提取文本层(无需 OCR) - 保留文档结构 - 处理受密码保护的 PDF

### OCR 引擎 - 底层使用 Tesseract.js - 支持 100+ 种语言 - 可调整的质量/速度权衡 - 用于准确性的置信度评分

### 依赖 - **零外部依赖** - 仅使用 Node.js 内置模块 - PDF.js 包含在技能中 - Tesseract.js 已打包

## 错误处理

### 无效的 PDF - 清晰的错误消息 - 建议修复方法(检查文件格式) - 跳过批处理中的下一个文件

### OCR 失败 - 报告置信度分数 - 建议以更高质量重新扫描 - 回退到基本提取

### 内存问题 - 大文件的流处理 - 进度报告 - 优雅降级

## 配置

### 编辑 `config.json`: ```json { "ocr": { "enabled": true, "defaultLanguage": "eng", "quality": "medium", "languages": ["eng", "spa", "fra", "deu"] }, "output": { "defaultFormat": "text", "preserveFormatting": true, "includeMetadata": true }, "batch": { "maxConcurrent": 3, "timeoutSeconds": 30 } } ```

## 示例

### 从发票提取 ```javascript const invoice = await extractText('./invoice.pdf'); console.log(invoice.text); // "INVOICE #12345 Date: 2026-02-04..." ```

### 从扫描合同提取 ```javascript const contract = await extractText('./scanned-contract.pdf', { ocr: true, language: 'eng', ocrQuality: 'high' }); console.log(contract.text); // "AGREEMENT This contract between..." ```

### 批量处理文档 ```javascript const docs = await extractBatch([ './doc1.pdf', './doc2.pdf', './doc3.pdf', './doc4.pdf' ]); console.log(`Processed ${docs.successCount}/${docs.results.length} documents`); ```

## 故障排除

### OCR 不工作 - 检查 PDF 是否真的是扫描件(而非基于文本) - 尝试不同的质量设置(低/中/高) - 确保语言与文档匹配 - 检查扫描的图像质量

### 提取结果为空 - PDF 可能仅包含图像 - OCR 置信度低导致失败 - 尝试不同的语言设置

### 处理缓慢 - 大 PDF 需要更长时间 - 降低质量以提高速度 - 分小批处理

## 提示

### 最佳效果 - 尽可能使用基于文本的 PDF(更快,100% 准确) - 用于 OCR 的高质量扫描(300 DPI+) - 扫描前清理背景 - 使用正确的语言设置

### 性能优化 - 多文件批处理 - 对基于文本的 PDF 禁用 OCR - 在可接受的情况下降低 OCR 质量以提高速度

## 路线图

- [ ] PDF/A 支持 - [ ] 高级 OCR 预处理 - [ ] 从 OCR 提取表格 - [ ] 手写 OCR - [ ] PDF 表单字段提取 - [ ] 批量语言检测 - [ ] 置信度评分可视化

## 许可证

MIT

---

**从 PDF 提取文本。快速、准确、零依赖。** 🔮

更多产品