介绍
# 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 提取文本。快速、准确、零依赖。** 🔮