@jerryjliu0: 我们刚刚发布了LiteParse的一个功能,该功能允许在Rust中原生处理图像到PDF的转换,从而去除对外部包的依赖……
摘要
LiteParse是一个快速、轻量级、开源的PDF解析工具,使用Rust编写,原生支持图像到PDF的转换,并提供带有边界框的空间文本解析,可通过多种包(Rust、Node.js、Python、WASM)使用。
查看缓存全文
缓存时间: 2026/07/25 10:04
我们刚刚发布了一个 LiteParse 功能,可以原生在 Rust 中处理图像转 PDF,移除了对外部包的依赖。LiteParse 是 PDF 解析的作弊码。它是目前最快、最轻量、最准确且免费/开源的解析方案。即使你后续需要基于 VLM 的解析,它也是任何项目的一个良好起点:https://github.com/run-llama/liteparse…
run-llama/liteparse
来源:https://github.com/run-llama/liteparse
LiteParse
CI(https://github.com/run-llama/liteparse/actions/workflows/ci.yml) | Crates.io 版本(https://crates.io/crates/liteparse) | npm 版本(https://www.npmjs.com/package/@llamaindex/liteparse) | wasm 版本(https://www.npmjs.com/package/@llamaindex/liteparse-wasm) | PyPI 版本(https://pypi.org/project/liteparse/) | 许可证(https://opensource.org/licenses/Apache-2.0) | 文档(https://developers.llamaindex.ai/liteparse/)
English | 简体中文
寻找 LiteParse V1?请点击此链接查看旧代码(https://github.com/run-llama/liteparse/tree/logan/liteparse-v1)
LiteParse 是一个独立的 OSS PDF 解析工具,专注于快速和轻量解析。它提供带有边界框的高质量空间文本解析,无需专有 LLM 功能或云依赖项。一切都在你的本地机器上运行。
本地解析遇到瓶颈? 对于复杂文档(密集表格、多列布局、图表、手写文本或扫描 PDF),我们的云文档解析器 LlamaParse(https://developers.llamaindex.ai/python/cloud/llamaparse/?utm_source=github&utm_medium=liteparse)将提供显著更好的结果,它是为生产级文档流水线构建的。LlamaParse 处理困难的部分,让你的模型看到干净、结构化的数据和 Markdown。
免费注册 LlamaParse(https://cloud.llamaindex.ai?utm_source=github&utm_medium=liteparse)
概述
- 快速文本解析:使用 PDFium 进行空间文本解析
- 灵活的 OCR 系统:
- 内置:Tesseract(零设置,随库捆绑)
- HTTP 服务器:可接入任何 OCR 服务器(EasyOCR、PaddleOCR、自定义)
- 标准 API:简单、定义明确的 OCR API 规范
- 复杂度检测:廉价地检查文档是否需要 OCR 或更重的解析——可在完全解析之前路由、拒绝或估算成本
- 截图生成:为 LLM 代理生成高质量的页面截图
- 多种输出格式:Markdown、JSON 和文本
- Markdown 输出:包含标题、表格、列表、图像和链接的结构化 Markdown——非常适合馈送给 LLM 和 RAG 流水线
- 边界框:精确的文本定位信息
- 多语言:可从 Rust、Node.js/TypeScript、Python 或浏览器(WASM)使用
- 多平台:Linux、macOS(Intel/ARM)、Windows
flowchart LR
subgraph Input["输入格式"]
direction TB
PDF["PDF"]
DOCX["DOCX"]
XLSX["XLSX"]
PPTX["PPTX"]
IMG["图像"]
end
subgraph Core["Rust 核心"]
direction TB
CONV["格式转换\nLibreOffice / Rust image + resvg + usvg crates"]
EXTRACT["文本提取\nPDFium C 库"]
OCR["选择性 OCR\nTesseract / HTTP / 自定义"]
MERGE["OCR 合并\n原生文本 + OCR 结果"]
PROJ["网格投影\n空间布局重建"]
CONV --> EXTRACT
EXTRACT --> OCR --> MERGE --> PROJ
EXTRACT --> MERGE
end
subgraph Output["输出"]
direction TB
JSON["结构化 JSON\n文本 + 边界框"]
TEXT["纯文本\n保留布局"]
SCREEN["截图\nPNG 渲染"]
end
subgraph Bindings["语言绑定"]
direction TB
NAPI["Node.js / TypeScript\nnapi-rs"]
PYO3["Python\nPyO3"]
WASM["浏览器 / WASM\nwasm-bindgen"]
CLI["CLI\ncargo / npm / pip"]
NAPI ~~~ PYO3 ~~~ WASM ~~~ CLI
end
PDF --> EXTRACT
DOCX & XLSX & PPTX & IMG --> CONV
PROJ --> JSON & TEXT & SCREEN
JSON & TEXT & SCREEN --> Bindings
style Input fill:#F5F5F5,color:#000000,stroke:#37D7FA,stroke-width:2px
style Core fill:#F5F5F5,color:#000000,stroke:#3E18F9,stroke-width:2px
style Output fill:#F5F5F5,color:#000000,stroke:#FF8705,stroke-width:2px
style Bindings fill:#F5F5F5,color:#000000,stroke:#FF8DF2,stroke-width:2px
style PDF fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style DOCX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style XLSX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style PPTX fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style IMG fill:#96E7F9,color:#000000,stroke:#37D7FA,stroke-width:1px
style CONV fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style EXTRACT fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style OCR fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style MERGE fill:#92AEFF,color:#000000,stroke:#4B72FE,stroke-width:1px
style PROJ fill:#4B72FE,color:#FFFFFF,stroke:#3E18F9,stroke-width:2px
style JSON fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
style TEXT fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
style SCREEN fill:#FFBD74,color:#000000,stroke:#FF8705,stroke-width:1px
style NAPI fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
style PYO3 fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
style WASM fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
style CLI fill:#FFBFF8,color:#000000,stroke:#FF8DF2,stroke-width:1px
安装
通过你喜欢的包管理器安装。所有版本(除 WASM 外)都附带了相同的 lit CLI。
| 语言 | 安装 | 库文档 |
|---|---|---|
| Node.js / TypeScript | npm i -g @llamaindex/liteparse | Node.js README |
| Python | pip install liteparse | Python README |
| Rust | cargo install liteparse(CLI)/ cargo add liteparse(库) | Rust README(crates.io) |
| 浏览器(WASM) | npm i @llamaindex/liteparse-wasm | WASM README |
Agent 技能
你可以将 liteparse 用作 agent 技能,使用 skills CLI 工具下载:
npx skills add run-llama/llamaparse-agent-skills --skill liteparse
或者将 SKILL.md(https://github.com/run-llama/llamaparse-agent-skills/blob/main/skills/liteparse/SKILL.md)文件复制粘贴到你自己的技能设置中。
CLI 用法
CLI 在所有安装(npm、pip、cargo install)中是一致的。
解析文件
# 基本解析
lit parse document.pdf
# 解析为 Markdown——标题、表格、列表、图像、链接
lit parse document.pdf --format markdown -o output.md
# 使用特定格式解析
lit parse document.pdf --format json -o output.json
# 解析特定页面
lit parse document.pdf --target-pages "1-5,10,15-20"
# 不使用 OCR 解析
lit parse document.pdf --no-ocr
# 在 JSON 中包含页面范围的矢量路径数据
lit parse document.pdf --format json --extract-vector-graphics
# 包含丰富的逐项 PDF 文本元数据
lit parse document.pdf --format json --extract-text-metadata
# 在结构化 JSON 中包含页面注释
lit parse document.pdf --format json --extract-annotations
# 包含 AcroForm 微件字段和值(在内存中修复孤立的微件)
lit parse document.pdf --format json --extract-form-fields
# 解析远程 PDF
curl -sL https://example.com/report.pdf | lit parse -
Markdown 输出
LiteParse 可以直接将文档渲染为 Markdown。这意味着从空间布局重建标题、表格、列表、图像和链接。这非常适合将文档馈送给 LLM 和 RAG 流水线。此模式纯粹基于启发式和规则,因此复杂文档可能无法完美渲染,但速度很快。
# 渲染为 Markdown
lit parse document.pdf --format markdown -o output.md
# 去除图像,而不是发出占位符
lit parse document.pdf --format markdown --image-mode off
# 将嵌入的图像提取到磁盘,并在 Markdown 中引用它们
lit parse document.pdf --format markdown --image-mode embed --extract-images --image-output-dir ./images
# 提取图像字节和元数据,而不更改 Markdown 图像处理方式
lit parse document.pdf --format json --extract-images
# 将链接文本作为纯文本发出(无 [text](url) 语法)
lit parse document.pdf --format markdown --no-links
# 在 JSON 中包含标记 PDF 的逻辑结构
lit parse document.pdf --format json --extract-structure-tree
图像处理由 --image-mode 控制:
| 模式 | 行为 |
|---|---|
placeholder(默认) | 按阅读顺序发出 `` 引用 |
off | 完全去除图像 |
embed | 发出与 placeholder 相同的图像引用 |
--extract-images 是唯一启用嵌入图像提取的选项。--image-output-dir 需要它,并将提取的字节写入磁盘。JSON 输出包含每个图像的 name、path、页面边界框、固有像素尺寸、旋转、格式和重复关系;像素字节从不嵌入 JSON。相同的图像资源重用相同的输出文件。
库调用者可以通过 extract_images: true(Rust)、extractImages: true(Node/WASM)或 extract_images=True(Python)选择加入。默认值为 false。Markdown 图像模式仅控制呈现;占位符引用仍会在没有字节的情况下被发现。
Markdown 重建质量随文档复杂性而变化。对于最困难的文档(密集表格、多列布局、扫描件),LlamaParse(https://developers.llamaindex.ai/python/cloud/llamaparse/?utm_source=github&utm_medium=liteparse)仍然是最准确的选择。
矢量图形
矢量路径输出是选择加入的,因为路径密集型 PDF 可能会产生较大的有效负载。使用 --extract-vector-graphics、Rust/Python extract_vector_graphics = true 或 JavaScript/WASM extractVectorGraphics: true 启用。然后,每个页面都包含 vector_graphics(JavaScript 中为 vectorGraphics),其中包含:
shapes:路径边界框、描边/填充绘制状态和 ARGB 颜色,以及路径是否包含贝塞尔曲线。lines:兼容的水平/垂直片段,使用描边宽度和绘制颜色合并,并提供左上角 72-DPI 视口坐标。
该表示遵循 LlamaParse PDFium 路径提取;LiteParse 将形状矩形称为 bbox 而不是 PDFium 的 coords,并使用 width / height 而不是 w / h。默认情况下此字段不存在(或为 None/undefined)。对角线和曲线段由其父形状表示,但不会作为线条发出。
标记 PDF 结构树
启用 --extract-structure-tree(Rust/Python extract_structure_tree,JavaScript/WASM extractStructureTree)以添加页面范围的 structure_tree。它保留每个根,并递归地公开元素类型、ID、实际/替代文本、标题、类型化标量属性、标记内容 ID、子级和引用的链接注释。默认情况下该字段不存在;启用后,未标记的页面包含 roots: []。
文档元数据、内容边界和 XFA 数据包
解析结果(Rust/Node/Python API)携带文档的 /Info 中的 creator 和 producer 条目(如果存在);这些仅是 API 级别的,永远不会出现在 CLI JSON 输出中。启用 --extract-content-bounds(Rust/Python extract_content_bounds,JavaScript/WASM extractContentBounds)以添加每页的 content_bounds:页面上顶层内容对象在视口坐标中的联合边界框(对于空页面不存在)。启用 --extract-xfa-packets(Rust/Python extract_xfa_packets,JavaScript/WASM extractXfaPackets)以添加 xfa_packets,其中包含每个原始 XFA 数据包的索引、名称、字节长度和 XML 内容;非 XFA 文档产生空列表。所有这些都是默认关闭的,因此默认的 JSON 输出保持不变。
截图栅格信号
截图在页面栅格之上绘制 AcroForm 字段外观(填充值、复选框状态),因此表单数据在渲染和 OCR 中可见。每个截图结果报告 is_solid_fill(渲染后的空白页面),并且使用 detect_screenshot_rects(Node 中为 detectScreenshotRects)还报告 rects:在栅格中找到的纯色相同颜色矩形和线条(视口坐标),这涵盖了没有矢量路径的扫描/扁平化页面。
检查复杂度
在完全解析之前,检查文档是否确实需要 OCR 或更重的处理。这是一个廉价的、仅文本层的传递——可用于将文档路由到不同的流水线、拒绝无法处理的文档或估算成本。
# 打印复杂度结论和每页 JSON
lit is-complex document.pdf
# 作为 shell 谓词使用——仅在
相似文章
@jerryjliu0: LiteParse,我们的开源/基于Rust的文档解析器,运行速度之快,连Claude Fable 5都难以置信 🔥
LiteParse 是一款快速的开源文档解析器,采用 Rust 编写,提供带边界框的高质量空间文本提取功能,支持多种语言和平台,适用于 AI 文档工作负载。
@jerryjliu0: 以光速解析PDF(此视频为1倍速)简直是电影
Jerry Liu宣布了LiteParse v2,一款基于Rust的PDF解析器,据称是目前最快、最准确的开源、无模型PDF解析器。
@jerryjliu0:上周我们重做了Liteparse,使其成为目前最快的PDF解析器。Liteparse的一个被低估之处是它不仅能提取文本,还能提供边界框,让编码代理能够精确绘制出原始文档的审计轨迹。
Jerry Liu宣布重做后的LiteParse是一款快速的PDF解析器,可提供用于审计轨迹的边界框,并附带示例演示。
@jerryjliu0:LiteParse,我们的开源文档解析器,在将复杂 PDF 布局、文本和表格解析为清晰的空间网格方面表现出色……
LiteParse 是一款基于启发式规则的开源 PDF 解析器,无需依赖 ML 模型即可快速将复杂布局、文本和表格转换为整洁的空间网格。
@itsafiz:使用 LiteParse 构建了一个超快的 PDF 解析服务!LiteParse 是由 @llama_index 开发的独立开源 PDF 解析工具 f…
使用 LlamaIndex 的开源工具 LiteParse 和 Cursor AI 的帮助,构建了一个快速的 PDF 解析服务。