@jerryjliu0: 我们刚刚发布了LiteParse的一个功能,该功能允许在Rust中原生处理图像到PDF的转换,从而去除对外部包的依赖……

X AI KOLs Following 工具

摘要

LiteParse是一个快速、轻量级、开源的PDF解析工具,使用Rust编写,原生支持图像到PDF的转换,并提供带有边界框的空间文本解析,可通过多种包(Rust、Node.js、Python、WASM)使用。

我们刚刚发布了LiteParse的一个功能,该功能允许在Rust中原生处理图像到PDF的转换,从而去除对外部包的依赖。 LiteParse是PDF解析的作弊码。它是目前最快、最轻量、最准确的开源/免费解析方案。 即使未来需要基于VLM的解析,这也是任何项目的绝佳起点:https://github.com/run-llama/liteparse…
查看原文
查看缓存全文

缓存时间: 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 / TypeScriptnpm i -g @llamaindex/liteparseNode.js README
Pythonpip install liteparsePython README
Rustcargo install liteparse(CLI)/ cargo add liteparse(库)Rust README(crates.io)
浏览器(WASM)npm i @llamaindex/liteparse-wasmWASM 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 在所有安装(npmpipcargo 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 输出包含每个图像的 namepath、页面边界框、固有像素尺寸、旋转、格式和重复关系;像素字节从不嵌入 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 中的 creatorproducer 条目(如果存在);这些仅是 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 谓词使用——仅在

相似文章