主题
LiteParse 不只能从 CLI 调用,也可以作为库用在你自己的代码里。TypeScript 与 Python 都有原生包。
- TypeScript
- Python
- Rust
- 浏览器(WASM)
TypeScript / Node.js 用法
作为项目依赖安装:
终端窗口
npm install @llamaindex/liteparse
# or
pnpm add @llamaindex/liteparse解析一个文档
import { LiteParse } from "@llamaindex/liteparse";
const parser = new LiteParse({ ocrEnabled: true });
const result = await parser.parse("document.pdf");
// Full document text with layout preserved
console.log(result.text);
// Per-page data
for (const page of result.pages) {
console.log(`Page ${page.pageNum}: ${page.textItems.length} text items`);
}带边界框的 JSON 输出
文字项会带上以 PDF 点为单位的空间坐标(x、y、width、height):
const parser = new LiteParse({ outputFormat: "json" });
const result = await parser.parse("document.pdf");
for (const page of result.pages) {
for (const item of page.textItems) {
console.log(`[${item.x}, ${item.y}] ${item.width}×${item.height} "${item.text}"`);
}
}Markdown 输出
把文档渲染成 Markdown —— 标题、表格、列表、图片与链接都会带上。渲染出的 Markdown 通过 result.text 返回:
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配置
任何配置项都可以传给构造函数。你只需要写想覆盖的那部分:
const parser = new LiteParse({
ocrEnabled: true,
ocrServerUrl: "http://localhost:8828/ocr",
ocrLanguage: "fra",
dpi: 300,
outputFormat: "json",
targetPages: "1-10",
password: "secret",
});图片、矢量图形、批注、表单字段、结构树以及逐项排版信息默认都不开,需要用各自的开关启用。见抽取选项。
Buffer / Uint8Array 输入
可以直接传原始字节,而不给文件路径:
import { readFile } from "fs/promises";
const parser = new LiteParse();
// From a file read
const pdfBytes = await readFile("document.pdf");
const result = await parser.parse(pdfBytes);
// From an HTTP response
const response = await fetch("https://example.com/document.pdf");
const buffer = Buffer.from(await response.arrayBuffer());
const result2 = await parser.parse(buffer);页面截图
把页面生成为 buffer 图片 —— 适合发给 LLM 或落盘保存:
const parser = new LiteParse();
const screenshots = await parser.screenshot("document.pdf");
for (const shot of screenshots) {
console.log(`Page ${shot.pageNum}: ${shot.width}x${shot.height}`);
// shot.imageBuffer contains the raw PNG data
}
// Screenshot specific pages
const shots = await parser.screenshot("document.pdf", [1, 2, 3]);环境变量
| 变量 | 说明 |
|---|---|
TESSDATA_PREFIX | 存放 Tesseract .traineddata 文件的目录路径。用于离线/隔离网络环境。也可以改用 tessdataPath 配置项。 |
Python 用法
从 PyPI 安装包:
终端窗口
pip install liteparse解析一个文档
from liteparse import LiteParse
parser = LiteParse()
result = parser.parse("document.pdf")
# Full document text
print(result.text)
# Per-page data
for page in result.pages:
print(f"Page {page.page_num}: {len(page.text_items)} text items")配置
所有选项都通过构造函数传入:
parser = LiteParse(
ocr_enabled=True,
ocr_server_url="http://localhost:8828/ocr",
ocr_language="fra",
dpi=300,
target_pages="1-5",
password="secret",
)
result = parser.parse("document.pdf")所有选项都只能以关键字参数传入。图片、矢量图形、批注、表单字段、结构树以及逐项排版信息默认关闭,需要用各自的开关启用 —— 见抽取选项。
Markdown 输出
把文档渲染成 Markdown —— 标题、表格、列表、图片与链接都会带上。渲染出的 Markdown 通过 result.text 返回:
parser = LiteParse(
output_format="markdown", # "json" | "text" | "markdown"
image_mode="placeholder", # "placeholder" | "off" | "embed"
extract_links=True, # render [text](url) link syntax (default: True)
)
result = parser.parse("document.pdf")
print(result.text) # rendered Markdown从字节解析
如果文件内容已经在内存里(例如来自网页上传),直接把它传给 parse():
with open("document.pdf", "rb") as f:
pdf_bytes = f.read()
result = parser.parse(pdf_bytes)
print(result.text)页面截图
screenshots = parser.screenshot("document.pdf", page_numbers=[1, 2, 3])
for s in screenshots:
print(f"Page {s.page_num}: {s.width}x{s.height}")
# s.image_bytes contains PNG data环境变量
| 变量 | 说明 |
|---|---|
TESSDATA_PREFIX | 存放 Tesseract .traineddata 文件的目录路径。用于离线/隔离网络环境。也可以改用 tessdata_path 构造参数。 |
Rust 用法
把 liteparse 加进你的 Cargo.toml:
[dependencies]
liteparse = "2"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }解析一个文档
use liteparse::{LiteParse, LiteParseConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let parser = LiteParse::new(LiteParseConfig::default());
let result = parser.parse("document.pdf").await?;
// Full document text
println!("{}", result.text);
// Per-page data
for page in &result.pages {
println!("Page {}: {} text items", page.page_number, page.text_items.len());
}
Ok(())
}从字节解析
当 PDF 已经在内存里时,使用 PdfInput::Bytes:
use liteparse::{LiteParse, LiteParseConfig};
use liteparse::types::PdfInput;
let parser = LiteParse::new(LiteParseConfig::default());
let pdf_bytes = std::fs::read("document.pdf")?;
let result = parser.parse_input(PdfInput::Bytes(pdf_bytes)).await?;配置
只覆盖你需要的字段:
use liteparse::{LiteParse, LiteParseConfig, OutputFormat};
let config = LiteParseConfig {
ocr_enabled: true,
ocr_language: "fra".to_string(),
dpi: 300.0,
target_pages: Some("1-10".to_string()),
output_format: OutputFormat::Json,
password: Some("secret".to_string()),
..Default::default()
};
let parser = LiteParse::new(config);LiteParseConfig 是一个普通 struct,因此 ..Default::default() 是只设置所需项的惯用写法。图片、矢量图形、批注、表单字段、结构树以及逐项排版信息默认关闭 —— 见抽取选项。
Markdown 输出
把文档渲染成 Markdown —— 标题、表格、列表、图片与链接都会带上。渲染出的 Markdown 通过 result.text 返回:
use liteparse::config::{ImageMode, LiteParseConfig, OutputFormat};
use liteparse::LiteParse;
let config = LiteParseConfig {
output_format: OutputFormat::Markdown,
image_mode: ImageMode::Placeholder,
extract_links: true,
..Default::default()
};
let result = LiteParse::new(config).parse("document.pdf").await?;
println!("{}", result.text); // rendered Markdown页面截图
把页面生成为 PNG 字节:
let parser = LiteParse::new(LiteParseConfig::default());
let screenshots = parser.screenshot("document.pdf", None).await?;
for shot in &screenshots {
println!("Page {}: {}x{}", shot.page_num, shot.width, shot.height);
// shot.image_bytes contains the raw PNG data
}
// Screenshot specific pages
let shots = parser.screenshot("document.pdf", Some(vec![1, 2, 3])).await?;自定义 OCR 引擎
实现 OcrEngine trait 即可接入你自己的 OCR 后端:
use liteparse::LiteParse;
use liteparse::ocr::OcrEngine;
use std::sync::Arc;
let parser = LiteParse::new(Default::default())
.with_ocr_engine(Arc::new(my_engine));要使用原生 ONNX OCR,请启用 LiteParse 的 oar-ocr 特性,并把本地模型路径传给 OarOcrEngine::from_models。再启用 oar-ocr-auto-download 后,同一个构造函数也能接受已登记的裸文件名;oar-ocr 会从 ModelScope 下载它们、校验 SHA-256 摘要,并缓存在 $OAR_HOME(默认 ~/.oar)下。OAR 后端刻意只提供给 Rust,不包含在 Node.js、Python 或 WASM 的绑定二进制里。
特性
| 特性 | 默认 | 说明 |
|---|---|---|
tesseract | 是 | 通过 tesseract-rs 提供内置 Tesseract OCR。如果你只用 HTTP OCR 或完全不用 OCR,可用 default-features = false 关掉。 |
oar-ocr | 否 | 通过 oar-ocr 提供原生 ONNX OCR,使用本地或内存中的模型。仅可通过非 WASM 的 Rust API 使用。 |
oar-ocr-auto-download | 否 | 允许对已登记的 OAR 模型文件名做带校验的下载与缓存。 |
oar-ocr-{cuda,tensorrt,directml,coreml,webgpu,openvino} | 否 | 把选定的 ONNX Runtime 执行提供者转发给 oar-ocr。 |
浏览器(WASM)用法
安装 WASM 包:
终端窗口
npm install @llamaindex/liteparse-wasm解析一个文档
import init, { LiteParse } from "@llamaindex/liteparse-wasm";
// Initialize the WASM module (required once before use)
await init();
const parser = new LiteParse({ ocrEnabled: false });
// Pass a Uint8Array (e.g. from fetch, File input, or drag-drop)
const bytes = new Uint8Array(await file.arrayBuffer());
const result = await parser.parse(bytes);
console.log(result.text); // full document text
console.log(result.pages[0]); // per-page items with bboxes配置
所有选项都可选,命名使用 camelCase:
const parser = new LiteParse({
ocrEnabled: true,
ocrLanguage: "fra",
dpi: 300,
outputFormat: "json",
targetPages: "1-10",
maxPages: 100,
password: "secret",
quiet: false,
});Markdown 输出
浏览器构建同样支持 Markdown 输出 —— 设置 outputFormat: "markdown",然后从 result.text 读取渲染出的 Markdown。imageMode 与 extractLinks 选项见 Markdown 输出指南。
const parser = new LiteParse({ outputFormat: "markdown" });
const result = await parser.parse(bytes);
console.log(result.text); // rendered Markdown浏览器里的 OCR
原生 Tesseract 与 HTTP OCR 后端在浏览器里都不可用。要用 OCR,请提供一个带 recognize 方法的 JS 侧引擎:
const parser = new LiteParse({
ocrEnabled: true,
ocrLanguage: "eng",
ocrEngine: {
/**
* @param imageData - PNG-encoded image bytes
* @param width - rendered page width in pixels
* @param height - rendered page height in pixels
* @param language - e.g. "eng"
* @returns array of recognized text regions
*/
async recognize(imageData, width, height, language) {
// e.g. call tesseract.js in a worker, or a remote OCR service
return [
{ text: "Hello", bbox: [10, 20, 80, 40], confidence: 0.98 },
];
},
},
});注
- 输入必须是
Uint8Array—— 浏览器里不支持文件路径。 - 创建
LiteParse实例之前,必须先用await init()初始化 WASM 模块。