9f97f3abbe
CI - Python Bindings / sdist (push) Failing after 1s
CI - Python Bindings / Build x86_64-unknown-linux-musl (push) Failing after 1s
CI / fmt (push) Failing after 1s
E2E Output Validation / compare-outputs (push) Failing after 1s
Sync Docs to Developer Hub / sync-docs (push) Failing after 1s
CI - Python Bindings / Build x86_64-unknown-linux-gnu (push) Failing after 1s
CI - WASM Bindings / Build WASM (push) Failing after 0s
CI / clippy (push) Failing after 1s
CI / build-and-test (ubuntu-latest) (push) Failing after 0s
CI - WASM Bindings / Edge runtime PDF parse test (push) Has been skipped
CI - WASM Bindings / Browser PDF parse test (push) Has been skipped
Deploy Demo to GitHub Pages / deploy (push) Failing after 1s
CI / build-docker-image (push) Failing after 3s
CI - Node Bindings / Build darwin-x64 (push) Has been cancelled
CI - Node Bindings / Test win32-x64-msvc (push) Has been cancelled
CI - Node Bindings / Build linux-arm64-gnu (push) Has been cancelled
CI - Node Bindings / Build linux-x64-gnu (push) Has been cancelled
CI - Node Bindings / Build linux-x64-musl (push) Has been cancelled
CI - Node Bindings / Build win32-arm64-msvc (push) Has been cancelled
CI - Node Bindings / Build win32-x64-msvc (push) Has been cancelled
CI - Node Bindings / Test darwin-arm64 (push) Has been cancelled
CI - Node Bindings / Test darwin-x64 (push) Has been cancelled
CI - Node Bindings / Test linux-x64-gnu (push) Has been cancelled
CI - Node Bindings / Test linux-x64-musl (push) Has been cancelled
CI - Node Bindings / Test win32-arm64-msvc (push) Has been cancelled
CI - Python Bindings / Build aarch64-pc-windows-msvc (push) Has been cancelled
CI - Python Bindings / Build x86_64-pc-windows-msvc (push) Has been cancelled
CI - Python Bindings / Build x86_64-apple-darwin (push) Has been cancelled
CI - Python Bindings / Build aarch64-apple-darwin (push) Has been cancelled
CI - Python Bindings / Build aarch64-unknown-linux-gnu (push) Has been cancelled
CI - Node Bindings / Build darwin-arm64 (push) Has been cancelled
CI - Python Bindings / Test x86_64-apple-darwin (push) Has been cancelled
CI - Python Bindings / Test aarch64-apple-darwin (push) Has been cancelled
CI - Python Bindings / Test x86_64-unknown-linux-gnu (push) Has been cancelled
CI - Python Bindings / Test x86_64-unknown-linux-musl (push) Has been cancelled
CI - Python Bindings / Test aarch64-pc-windows-msvc (push) Has been cancelled
CI - Python Bindings / Test x86_64-pc-windows-msvc (push) Has been cancelled
CI / build-and-test (macos-26-intel) (push) Has been cancelled
CI / build-and-test (macos-latest) (push) Has been cancelled
CI / build-and-test (windows-11-arm) (push) Has been cancelled
CI / build-and-test (windows-latest) (push) Has been cancelled
E2E Output Validation / upload-dataset (push) Has been cancelled
140 lines
4.4 KiB
Markdown
140 lines
4.4 KiB
Markdown
# LiteParse Node.js
|
|
|
|
Node.js/TypeScript bindings for [LiteParse](https://github.com/run-llama/liteparse) — fast, lightweight PDF and document parsing with spatial text extraction.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm i @llamaindex/liteparse
|
|
```
|
|
|
|
This also installs the `lit` CLI command (use `npm i -g` for global access).
|
|
|
|
## Quick Start
|
|
|
|
```typescript
|
|
import { LiteParse } from '@llamaindex/liteparse';
|
|
|
|
const parser = new LiteParse();
|
|
const result = await parser.parse('document.pdf');
|
|
console.log(result.text);
|
|
|
|
// Access structured data
|
|
for (const page of result.pages) {
|
|
console.log(`Page ${page.pageNum}: ${page.textItems.length} text items`);
|
|
}
|
|
```
|
|
|
|
## Markdown Output
|
|
|
|
LiteParse can render documents directly to Markdown including headings, tables, lists,
|
|
images, and links reconstructed from the spatial layout. Great for feeding LLMs
|
|
and RAG pipelines. The rendered Markdown is returned on `result.text`:
|
|
|
|
```typescript
|
|
const parser = new LiteParse({
|
|
outputFormat: 'markdown', // "json" | "text" | "markdown"
|
|
imageMode: 'placeholder', // "placeholder" | "off" | "embed"
|
|
extractLinks: true, // render [text](url) link syntax (default: true)
|
|
});
|
|
const result = await parser.parse('document.pdf');
|
|
console.log(result.text); // rendered Markdown
|
|
```
|
|
|
|
> Reconstruction quality varies with document complexity.
|
|
|
|
## Configuration
|
|
|
|
All options are passed to the constructor:
|
|
|
|
```typescript
|
|
const parser = new LiteParse({
|
|
ocrEnabled: true, // Enable OCR (default: true)
|
|
ocrLanguage: 'eng', // Tesseract language code
|
|
ocrServerUrl: undefined, // HTTP OCR server URL (optional)
|
|
tessdataPath: undefined, // Path to tessdata directory (optional)
|
|
maxPages: 1000, // Max pages to parse
|
|
targetPages: '1-5,10', // Specific pages (optional)
|
|
dpi: 150, // Rendering DPI
|
|
outputFormat: 'json', // "json" | "text" | "markdown"
|
|
imageMode: 'placeholder', // Markdown image handling: "placeholder" | "off" | "embed"
|
|
extractLinks: true, // Render [text](url) links in markdown output
|
|
preserveVerySmallText: false, // Keep tiny text
|
|
password: undefined, // Password for protected documents
|
|
quiet: false, // Suppress progress output
|
|
numWorkers: 4, // Concurrent OCR workers
|
|
});
|
|
```
|
|
|
|
## Parsing from Bytes
|
|
|
|
Pass a `Buffer` or `Uint8Array` directly — useful for HTTP responses or in-memory data:
|
|
|
|
```typescript
|
|
import { readFile } from 'fs/promises';
|
|
|
|
const pdfBytes = await readFile('document.pdf');
|
|
const result = await parser.parse(pdfBytes);
|
|
console.log(result.text);
|
|
```
|
|
|
|
## Screenshots
|
|
|
|
Generate PNG screenshots of document pages:
|
|
|
|
```typescript
|
|
const screenshots = parser.screenshot('document.pdf', [1, 2, 3]);
|
|
for (const s of screenshots) {
|
|
console.log(`Page ${s.pageNum}: ${s.width}x${s.height}`);
|
|
// s.imageBuffer contains PNG bytes
|
|
}
|
|
```
|
|
|
|
## Document Complexity
|
|
|
|
Before committing to a full parse, check whether a document needs OCR or heavier
|
|
processing. `isComplex` is a cheap, text-layer-only pass that returns one entry per page
|
|
with a `needsOcr` verdict and the signals behind it — useful for routing documents to
|
|
different pipelines, rejecting ones you can't handle, or estimating cost.
|
|
|
|
```typescript
|
|
const parser = new LiteParse();
|
|
const pages = await parser.isComplex('document.pdf');
|
|
|
|
if (pages.some((p) => p.needsOcr)) {
|
|
// Route to the OCR-enabled pipeline
|
|
const result = await parser.parse('document.pdf');
|
|
} else {
|
|
// Cheap path — skip OCR entirely
|
|
const result = await new LiteParse({ ocrEnabled: false }).parse('document.pdf');
|
|
}
|
|
|
|
// Inspect why specific pages were flagged
|
|
for (const page of pages.filter((p) => p.needsOcr)) {
|
|
console.log(`Page ${page.pageNumber}: ${page.reasons.join(', ')}`);
|
|
}
|
|
```
|
|
|
|
`reasons` is one of `"scanned"`, `"no-text"`, `"sparse-text"`, `"embedded-images"`,
|
|
`"garbled"`, or `"vector-text"`. Raw bytes work here too.
|
|
|
|
## Supported Formats
|
|
|
|
- PDF (`.pdf`)
|
|
- Microsoft Office (`.docx`, `.xlsx`, `.pptx`, etc.) — requires LibreOffice
|
|
- OpenDocument (`.odt`, `.ods`, `.odp`) — requires LibreOffice
|
|
- Images (`.png`, `.jpg`, `.tiff`, etc.) — requires ImageMagick
|
|
- And more!
|
|
|
|
## CLI
|
|
|
|
The npm package includes the `lit` CLI:
|
|
|
|
```bash
|
|
lit parse document.pdf
|
|
lit parse document.pdf --format json -o output.json
|
|
lit screenshot document.pdf -o ./screenshots
|
|
lit batch-parse ./input ./output
|
|
lit is-complex document.pdf
|
|
```
|