Skip to content
LiteParse 文档版本 跟随上游 源快照 fdd225b6 更新于 2026-10-16

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 模块。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。