pdf-text-extractor
Extract text from PDFs with OCR support. Perfect for digitizing documents, processing invoices, or analyzing content. Zero dependencies required.
What this skill does
# PDF-Text-Extractor - Extract Text from PDFs
**Vernox Utility Skill - Perfect for document digitization.**
## Overview
PDF-Text-Extractor is a zero-dependency tool for extracting text content from PDF files. Supports both embedded text extraction (for text-based PDFs) and OCR (for scanned documents).
## Features
### ✅ Text Extraction
- Extract text from PDFs without external tools
- Support for both text-based and scanned PDFs
- Preserve document structure and formatting
- Fast extraction (milliseconds for text-based)
### ✅ OCR Support
- Use Tesseract.js for scanned documents
- Support multiple languages (English, Spanish, French, German)
- Configurable OCR quality/speed
- Fallback to text extraction when possible
### ✅ Batch Processing
- Process multiple PDFs at once
- Batch extraction for document workflows
- Progress tracking for large files
- Error handling and retry logic
### ✅ Output Options
- Plain text output
- JSON output with metadata
- Markdown conversion
- HTML output (preserving links)
### ✅ Utility Features
- Page-by-page extraction
- Character/word counting
- Language detection
- Metadata extraction (author, title, creation date)
## Installation
```bash
clawhub install pdf-text-extractor
```
## Quick Start
### Extract Text from 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}`);
```
### Batch Extract Multiple PDFs
```javascript
const results = await extractBatch({
pdfFiles: [
'./document1.pdf',
'./document2.pdf',
'./document3.pdf'
],
options: {
outputFormat: 'json',
ocr: true
}
});
console.log(`Extracted ${results.length} PDFs`);
```
### Extract with OCR
```javascript
const result = await extractText({
pdfPath: './scanned-document.pdf',
options: {
ocr: true,
language: 'eng',
ocrQuality: 'high'
}
});
// OCR will be used (scanned document detected)
```
## Tool Functions
### `extractText`
Extract text content from a single PDF file.
**Parameters:**
- `pdfPath` (string, required): Path to PDF file
- `options` (object, optional): Extraction options
- `outputFormat` (string): 'text' | 'json' | 'markdown' | 'html'
- `ocr` (boolean): Enable OCR for scanned docs
- `language` (string): OCR language code ('eng', 'spa', 'fra', 'deu')
- `preserveFormatting` (boolean): Keep headings/structure
- `minConfidence` (number): Minimum OCR confidence score (0-100)
**Returns:**
- `text` (string): Extracted text content
- `pages` (number): Number of pages processed
- `wordCount` (number): Total word count
- `charCount` (number): Total character count
- `language` (string): Detected language
- `metadata` (object): PDF metadata (title, author, creation date)
- `method` (string): 'text' or 'ocr' (extraction method)
### `extractBatch`
Extract text from multiple PDF files at once.
**Parameters:**
- `pdfFiles` (array, required): Array of PDF file paths
- `options` (object, optional): Same as extractText
**Returns:**
- `results` (array): Array of extraction results
- `totalPages` (number): Total pages across all PDFs
- `successCount` (number): Successfully extracted
- `failureCount` (number): Failed extractions
- `errors` (array): Error details for failures
### `countWords`
Count words in extracted text.
**Parameters:**
- `text` (string, required): Text to count
- `options` (object, optional):
- `minWordLength` (number): Minimum characters per word (default: 3)
- `excludeNumbers` (boolean): Don't count numbers as words
- `countByPage` (boolean): Return word count per page
**Returns:**
- `wordCount` (number): Total word count
- `charCount` (number): Total character count
- `pageCounts` (array): Word count per page
- `averageWordsPerPage` (number): Average words per page
### `detectLanguage`
Detect the language of extracted text.
**Parameters:**
- `text` (string, required): Text to analyze
- `minConfidence` (number): Minimum confidence for detection
**Returns:**
- `language` (string): Detected language code
- `languageName` (string): Full language name
- `confidence` (number): Confidence score (0-100)
## Use Cases
### Document Digitization
- Convert paper documents to digital text
- Process invoices and receipts
- Digitize contracts and agreements
- Archive physical documents
### Content Analysis
- Extract text for analysis tools
- Prepare content for LLM processing
- Clean up scanned documents
- Parse PDF-based reports
### Data Extraction
- Extract data from PDF reports
- Parse tables from PDFs
- Pull structured data
- Automate document workflows
### Text Processing
- Prepare content for translation
- Clean up OCR output
- Extract specific sections
- Search within PDF content
## Performance
### Text-Based PDFs
- **Speed:** ~100ms for 10-page PDF
- **Accuracy:** 100% (exact text)
- **Memory:** ~10MB for typical document
### OCR Processing
- **Speed:** ~1-3s per page (high quality)
- **Accuracy:** 85-95% (depends on scan quality)
- **Memory:** ~50-100MB peak during OCR
## Technical Details
### PDF Parsing
- Uses native PDF.js library
- Extracts text layer directly (no OCR needed)
- Preserves document structure
- Handles password-protected PDFs
### OCR Engine
- Tesseract.js under the hood
- Supports 100+ languages
- Adjustable quality/speed tradeoff
- Confidence scoring for accuracy
### Dependencies
- **ZERO external dependencies**
- Uses Node.js built-in modules only
- PDF.js included in skill
- Tesseract.js bundled
## Error Handling
### Invalid PDF
- Clear error message
- Suggest fix (check file format)
- Skip to next file in batch
### OCR Failure
- Report confidence score
- Suggest rescan at higher quality
- Fallback to basic extraction
### Memory Issues
- Stream processing for large files
- Progress reporting
- Graceful degradation
## Configuration
### Edit `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
}
}
```
## Examples
### Extract from Invoice
```javascript
const invoice = await extractText('./invoice.pdf');
console.log(invoice.text);
// "INVOICE #12345 Date: 2026-02-04..."
```
### Extract from Scanned Contract
```javascript
const contract = await extractText('./scanned-contract.pdf', {
ocr: true,
language: 'eng',
ocrQuality: 'high'
});
console.log(contract.text);
// "AGREEMENT This contract between..."
```
### Batch Process Documents
```javascript
const docs = await extractBatch([
'./doc1.pdf',
'./doc2.pdf',
'./doc3.pdf',
'./doc4.pdf'
]);
console.log(`Processed ${docs.successCount}/${docs.results.length} documents`);
```
## Troubleshooting
### OCR Not Working
- Check if PDF is truly scanned (not text-based)
- Try different quality settings (low/medium/high)
- Ensure language matches document
- Check image quality of scan
### Extraction Returns Empty
- PDF may be image-only
- OCR failed with low confidence
- Try different language setting
### Slow Processing
- Large PDF takes longer
- Reduce quality for speed
- Process in smaller batches
## Tips
### Best Results
- Use text-based PDFs when possible (faster, 100% accurate)
- High-quality scans for OCR (300 DPI+)
- Clean background before scanning
- Use correct language setting
### Performance Optimization
- Batch processing for multiple files
- Disable OCR for text-based PDFs
- Lower OCR quality for speed when acceptable
## Roadmap
- [ ] PDF/A support
- [ ] Advanced OCR pre-processing
- [ ] Table extraction from OCR
- [ ] Handwriting OCR
- [ ] PDF form field extraction
- [ ] Batch language detection
- [ ] Confidence scoring visualization
## License
MIT
---
**Extract texRelated in Writing & Docs
jax-development
IncludedUse this skill when the user is writing, debugging, profiling, refactoring, reviewing, benchmarking, parallelising, exporting, or explaining JAX code, or when they mention JAX, jax.numpy, jit, grad, value_and_grad, vmap, scan, lax, random keys, pytrees, jax.Array, sharding, Mesh, PartitionSpec, NamedSharding, pmap, shard_map, Pallas, XLA, StableHLO, checkify, profiler, or the JAX repo. It helps turn NumPy or PyTorch-style code into pure functional JAX, fix tracer/control-flow/shape/PRNG bugs, remove recompiles and host-device syncs, choose transforms and sharding strategies, inspect jaxpr/lowering/IR, and benchmark compiled code correctly.
nature-article-writer
IncludedDrafts, rewrites, diagnostically critiques, and style-calibrates primary research manuscripts for Nature and Nature Portfolio journals. Use when the user wants a Nature-style title, summary paragraph or abstract, introduction, results, discussion, methods, figure legends, presubmission enquiry, cover letter, reviewer response, or when a scientific draft sounds generic, jargon-heavy, structurally weak, or AI-ish and needs precise, broad-reader-friendly prose without inventing data, analyses, or references. Best for primary research articles and letters rather than reviews or press releases unless explicitly adapting one.
deckrd
IncludedDocument-driven framework that derives requirements, specifications, implementation plans, and executable tasks from goals through structured AI dialogue. Use when user says "write requirements", "create spec", "plan implementation", "derive tasks", "structure this feature", "break down into tasks", or "document this module". Also use for reverse engineering existing code into docs (/deckrd rev). Do NOT use for direct code writing — use /deckrd-coder after tasks are generated. Do NOT use when the user only wants to run or fix existing code without planning.
clinical-decision-support
IncludedGenerate professional clinical decision support (CDS) documents for pharmaceutical and clinical research settings, including patient cohort analyses (biomarker-stratified with outcomes) and treatment recommendation reports (evidence-based guidelines with decision algorithms). Supports GRADE evidence grading, statistical analysis (hazard ratios, survival curves, waterfall plots), biomarker integration, and regulatory compliance. Outputs publication-ready LaTeX/PDF format optimized for drug development, clinical research, and evidence synthesis.
handling-sf-data
IncludedSalesforce data operations with 130-point scoring. Use this skill to create, update, delete, bulk import/export, generate test data, and clean up org records using sf CLI and anonymous Apex. TRIGGER when: user creates test data, performs bulk import/export, uses sf data CLI commands, needs data factory patterns for Apex tests, or needs to seed/clean records in a Salesforce org. DO NOT TRIGGER when: SOQL query writing only (use querying-soql), Apex test execution (use running-apex-tests), or metadata deployment (use deploying-metadata).
accelint-ac-to-playwright
IncludedConvert and validate acceptance criteria for Playwright test automation. Use when user asks to (1) review/evaluate/check if AC are ready for automation, (2) assess if AC can be converted as-is, (3) validate AC quality for Playwright, (4) turn AC into tests, (5) generate tests from acceptance criteria, (6) convert .md bullets or .feature Gherkin files to Playwright specs, (7) create test automation from requirements. Handles both bullet-style markdown and Gherkin syntax with JSON test plan generation and validation.