> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-zh.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenDataLoader PDF 集成

> 使用 LangChain Python 集成 OpenDataLoader PDF 文档加载器。

**面向 RAG 的 PDF 解析：** 转换为 Markdown 和 JSON，快速、本地运行、无需 GPU

[OpenDataLoader PDF](https://github.com/opendataloader-project/opendataloader-pdf) 将 PDF 转换为 **可供 LLM 直接使用的 Markdown 和 JSON**，具备准确的阅读顺序、表格提取和边界框信息——全部在您的机器上本地运行。

**开发者选择 OpenDataLoader 的原因：**

* **确定性**——相同的输入总是产生相同的输出（无 LLM 幻觉）
* **快速**——在 CPU 上每秒处理 100+ 页
* **私密**——100% 本地运行，零数据传输
* **准确**——为每个元素提供边界框，正确的多列阅读顺序

## 概述

### 集成详情

| 类                                                                                  | 包                                                                                        |  本地 | 可序列化 | JS 支持 |
| :--------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------- | :-: | :--: | :---: |
| [OpenDataLoader PDF](https://github.com/opendataloader-project/opendataloader-pdf) | [`langchain-opendataloader-pdf`](https://pypi.org/project/langchain-opendataloader-pdf/) |  ✅  |   ❌  |   ❌   |

### 加载器特性

|             来源            | 文档惰性加载 | 原生异步支持 |
| :-----------------------: | :----: | :----: |
| `OpenDataLoaderPDFLoader` |    ✅   |    ❌   |

`OpenDataLoaderPDFLoader` 组件使您能够将 PDF 解析为结构化的 [`Document`](https://reference.langchain.com/python/langchain-core/documents/base/Document) 对象。

## 要求

* Python >= 3.10
* 系统 `PATH` 中需有 Java 11 或更新版本

## 安装

```bash theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
pip install -U langchain-opendataloader-pdf
```

## 快速开始

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
from langchain_opendataloader_pdf import OpenDataLoaderPDFLoader

loader = OpenDataLoaderPDFLoader(
    file_path=["path/to/document.pdf", "path/to/folder"],
    format="text"
)
documents = loader.load()

for doc in documents:
    print(doc.metadata, doc.page_content[:80])
```

## 参数

| 参数                      | 类型                 | 默认值         | 描述                                                                   |
| ----------------------- | ------------------ | ----------- | -------------------------------------------------------------------- |
| `file_path`             | `str \| List[str]` | —           | **（必需）** PDF 文件路径或目录路径                                               |
| `format`                | `str`              | `"text"`    | 输出格式：`"text"`、`"markdown"`、`"json"`、`"html"`                         |
| `split_pages`           | `bool`             | `True`      | 是否按页面拆分为独立的 Document 对象                                              |
| `quiet`                 | `bool`             | `False`     | 是否抑制控制台日志输出                                                          |
| `password`              | `str`              | `None`      | 加密 PDF 的密码                                                           |
| `use_struct_tree`       | `bool`             | `False`     | 是否使用 PDF 结构树（适用于带标签的 PDF）                                            |
| `table_method`          | `str`              | `"default"` | `"default"`（基于边框）或 `"cluster"`（边框 + 聚类）                              |
| `reading_order`         | `str`              | `"xycut"`   | `"xycut"` 或 `"off"`                                                  |
| `keep_line_breaks`      | `bool`             | `False`     | 是否保留原始换行符                                                            |
| `image_output`          | `str`              | `"off"`     | `"off"`、`"embedded"`（Base64）或 `"external"`                           |
| `image_format`          | `str`              | `"png"`     | `"png"` 或 `"jpeg"`                                                   |
| `content_safety_off`    | `List[str]`        | `None`      | 禁用安全过滤器：`"hidden-text"`、`"off-page"`、`"tiny"`、`"hidden-ocg"`、`"all"` |
| `replace_invalid_chars` | `str`              | `None`      | 用于替换无效字符的字符串                                                         |

## 使用示例

### 输出格式

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
# 纯文本（默认）- 适用于简单的 RAG
loader = OpenDataLoaderPDFLoader(file_path="doc.pdf", format="text")

# Markdown - 保留标题、列表、表格
loader = OpenDataLoaderPDFLoader(file_path="doc.pdf", format="markdown")

# JSON - 包含边界框的结构化数据
loader = OpenDataLoaderPDFLoader(file_path="doc.pdf", format="json")

# HTML - 带样式的输出
loader = OpenDataLoaderPDFLoader(file_path="doc.pdf", format="html")
```

### 带标签的 PDF 支持

对于具有结构标签的可访问 PDF（常见于政府/法律文档）：

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
loader = OpenDataLoaderPDFLoader(
    file_path="accessible_document.pdf",
    use_struct_tree=True  # 使用原生 PDF 结构
)
```

### 密码保护的 PDF

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
loader = OpenDataLoaderPDFLoader(
    file_path="encrypted.pdf",
    password="secret123"
)
```

### 图像处理

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
# 默认排除图像 (image_output="off")
# 这对于基于文本的 RAG 管道是最优的

# 将图像嵌入为 Base64（用于多模态 RAG）
loader = OpenDataLoaderPDFLoader(
    file_path="doc.pdf",
    format="markdown",
    image_output="embedded",
    image_format="jpeg"  # 或 "png"
)
```

## 文档元数据

每个返回的 `Document` 都包含元数据：

```python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
doc.metadata
# {'source': 'document.pdf', 'format': 'text', 'page': 1}
```

## 其他资源

* [LangChain OpenDataLoader PDF 集成 GitHub](https://github.com/opendataloader-project/langchain-opendataloader-pdf)
* [LangChain OpenDataLoader PDF 集成 PyPI 包](https://pypi.org/project/langchain-opendataloader-pdf/)
* [OpenDataLoader PDF GitHub](https://github.com/opendataloader-project/opendataloader-pdf)
* [OpenDataLoader PDF 主页](https://opendataloader.org/)

***

<div className="source-links">
  <Callout icon="edit">
    [Edit this page on GitHub](https://github.com/langchain-ai/docs/edit/main/src/i18n\zh-CN\oss\python\integrations\document_loaders\opendataloader_pdf.mdx) or [file an issue](https://github.com/langchain-ai/docs/issues/new/choose).
  </Callout>

  <Callout icon="terminal-2">
    [Connect these docs](/use-these-docs) to Claude, VSCode, and more via MCP for real-time answers.
  </Callout>
</div>
