PDF Parser for AI-ready data. Automate PDF accessibility. Open-source.
来自项目 README
项目解读由 AI 根据历史资料整理,尚未经人工复核。仓库资料更新于 2026-09-08,与历史解读分开保留。
项目概览
OpenDataLoader PDF 是由韩国 Hancom 开发的 PDF 解析引擎,能将 PDF 转换为 AI 可消费的结构化数据(Markdown、JSON、HTML),同时是全球首个开源端到端 PDF 无障碍自动标注工具。它采用“本地确定性解析为主,AI 混合增强为辅”的核心思想:简单页面由本地 Java 引擎快速处理,复杂页面(如无边框表格、扫描件、公式、图表)路由到自托管的 AI 后端增强,全程数据不出机器。引擎提供阅读顺序识别(XY-Cut++)、边界框坐标、表格抽取、OCR(80+ 语言)、公式提取(LaTeX)、图表描述等功能,并内置 AI 安全过滤机制。项目采用 Apache-2.0 许可证,提供 Python、Node.js、Java SDK 及 CLI,支持 LangChain 集成。报告指出其基准测试成绩为开源第一(Hybrid 模式总分 0.907),但基准由 Hancom 内部测试,缺乏第三方独立验证。
解决什么问题
报告指出,PDF 是面向打印的格式,不是为机器理解而设计的,导致传统解析存在六大痛点:多栏 PDF 阅读顺序混乱,文本被混在一起;表格结构丢失,行列关系消失;解析结果缺乏源坐标,无法引用溯源;扫描件和公式无法处理;无障碍合规成本高(人工修复每份文档 50–200 美元);云端解析存在隐私风险。OpenDataLoader PDF 核心解决两大问题:RAG 管道的 PDF 解析瓶颈,以及 PDF 无障碍合规。
import opendataloader_pdf
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
format="markdown,json"
)
带注释的 PDF 输出 — 每个元素(标题、段落、表格、图片)均检测到边界框和语义类型。
解决什么问题?
问题
解决方案
状态
解析时 PDF 结构丢失 — 阅读顺序错误、表格损坏、无元素坐标
确定性本地 PDF 转 Markdown/JSON,含边界框,XY-Cut++ 阅读顺序
已发布
复杂表格、扫描 PDF、公式、图表需要 AI 级理解
混合模式将复杂页面路由至 AI 后端(基准测试第一)
已发布
手动 PDF 修复成本 — 无障碍法规(EAA、ADA、Section 508)要求 Tagged PDF。手动修复成本为 50–200 美元/份
将未标记 PDF 自动标记为 Tagged PDF(免费,Apache 2.0)。PDF/UA 工作流的基础;完整 PDF/UA-1/2 导出为企业附加功能
import opendataloader_pdf
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
format="markdown,json"
)
混合模式将快速的本地 Java 处理与 AI 后端相结合。简单页面保持本地处理(0.02秒);复杂页面路由到 AI,表格精度提高 90% 以上。
不要与标记 PDF 上的 --use-struct-tree 结合使用。--use-struct-tree 优先,因此混合后端不会被调用(会记录警告)。如果您想要混合后端,请去掉 --use-struct-tree。
pip install -U "opendataloader-pdf[hybrid]"
终端 1 — 启动后端服务器:
opendataloader-pdf-hybrid --port 5002
终端 2 — 处理 PDF:
# Batch all files in one call — each invocation spawns a JVM process, so repeated calls are slow
opendataloader-pdf --hybrid docling-fast file1.pdf file2.pdf folder/
Python:
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
hybrid="docling-fast"
)
# Server: enable formula enrichment
opendataloader-pdf-hybrid --enrich-formula
# Batch all files in one call — each invocation spawns a JVM process, so repeated calls are slow
opendataloader-pdf --hybrid docling-fast --hybrid-mode full file1.pdf file2.pdf folder/
# Server
opendataloader-pdf-hybrid --enrich-picture-description
# Batch all files in one call — each invocation spawns a JVM process, so repeated calls are slow
opendataloader-pdf --hybrid docling-fast --hybrid-mode full file1.pdf file2.pdf folder/
JSON 输出:
{
"type": "picture",
"page number": 1,
"bounding box": [72.0, 400.0, 540.0, 650.0],
"description": "A bar chart showing waste generation by region from 2016 to 2030..."
}
当 PDF 具有结构标签时,OpenDataLoader 会提取作者预期的精确布局 — 无需猜测,无需启发式方法。标题、列表、表格和阅读顺序均从源文件中保留。
输出质量取决于标签质量。 并非所有标记的 PDF 都标记良好。对于标签稀疏或不正确的 PDF,默认启发式模式或 --hybrid docling-fast 通常会产生更好的结果。
--use-struct-tree 优先于 --hybrid。 如果两者都设置在标记的 PDF 上,则使用结构树,并且不会调用混合后端(标记良好的 PDF 已经带有阅读顺序和结构)。如果您想要混合后端,请去掉 --use-struct-tree。
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
use_struct_tree=True # Use native PDF structure tags
)
# Batch all files in one call — each invocation spawns a JVM process, so repeated calls are slow
opendataloader-pdf file1.pdf file2.pdf folder/ --sanitize
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
format="json,markdown,pdf",
image_output="embedded", # "off", "embedded" (Base64), or "external" (default)
image_format="jpeg", # "png" or "jpeg"
use_struct_tree=True, # Use native PDF structure
)
import opendataloader_pdf
# Untagged PDF in → Tagged PDF out
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
format="tagged-pdf"
)
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
format="json",
hybrid="docling-fast" # For complex tables
)
JSON 输出中的每个元素都包含 bounding box(在 PDF 要点中为 [left, bottom, right, top])和 page number。当您的 RAG 管道返回答案时,将源块映射回其边界框,以在原始 PDF 中高亮显示确切位置。这实现了“点击查看来源”的用户体验——用户可以看到答案来自哪个段落、表格或图形。没有其他开源解析器默认提供每个元素的边界框。
如何将 PDF 转换为 Markdown 以供 LLM 使用?
import opendataloader_pdf
# Batch all files in one call — each convert() spawns a JVM process, so repeated calls are slow
opendataloader_pdf.convert(
input_path=["file1.pdf", "file2.pdf", "folder/"],
output_dir="output/",
format="markdown"
)
有。OpenDataLoader 是第一个端到端自动化 PDF 无障碍处理的开源工具。与 PDF Association 和 Dual Lab(veraPDF 开发者)合作构建,自动标记遵循 Well-Tagged PDF 规范,并使用 veraPDF 进行程序化验证。布局分析引擎检测文档结构(标题、表格、列表、阅读顺序)并自动生成无障碍标签。自动标记在 Apache 2.0 许可下将未标记的 PDF 转换为标记 PDF——无需专有 SDK 依赖。使用 format="tagged-pdf"(Python/Node.js)或 --format tagged-pdf(CLI)。对于需要完全符合 PDF/UA 的组织,企业附加组件提供 PDF/UA 导出和可视化标签编辑器。这取代了通常每份文档成本为 50–200 美元以上的手动修复工作流程。
这真的是第一个开源 PDF 自动标记工具吗?
是的。现有工具要么依赖专有 SDK 来写入结构标签,要么只输出非 PDF 格式(例如,Docling 输出 Markdown/JSON 但无法生成标记 PDF),要么需要人工干预。OpenDataLoader 是第一个完全在开源许可(Apache 2.0)下实现布局分析 → 标签生成 → 标记 PDF 输出的工具,且无专有依赖。自动标记遵循 PDF Association 的 Well-Tagged PDF 规范,并使用行业参考的开源 PDF/A 和 PDF/UA 验证器 veraPDF 进行验证。
如何将现有 PDF 转换为 PDF/UA?
OpenDataLoader 提供端到端管道:审计现有 PDF 的标签(use_struct_tree=True),将未标记的 PDF 自动标记为标记 PDF(format="tagged-pdf",Apache 2.0 下免费),并导出为 PDF/UA-1 或 PDF/UA-2(企业附加组件)。自动标记遵循 PDF Association 的 Well-Tagged PDF 规范,并使用 veraPDF 进行验证。自动标记生成标记 PDF;PDF/UA 导出是最后一步。联系我们 了解企业集成。
如何使我的 PDF 符合 EAA 合规要求?
《欧洲无障碍法案》要求到 2025 年 6 月 28 日数字产品必须无障碍。OpenDataLoader 支持完整的修复工作流程:审计 → 自动标记 → 标记 PDF → PDF/UA 导出。自动标记遵循 PDF Association 的 Well-Tagged PDF 规范,并使用 veraPDF 进行验证,确保输出符合标准。自动标记为标记 PDF 在 Apache 2.0 下开源。PDF/UA 导出和无障碍工作室是企业附加组件。请参阅我们的 无障碍指南。