文档解析(Unlimited-OCR)
接口描述
文档解析(Unlimited-OCR): 基于最新文心Unlimited-OCR 2,提供开箱即用、免部署的API调用服务,跨页表格、段落自动合并,标题层级精准解析,可直接返回 JSON/Markdown 结构化输出,助您快速实现复杂文档智能解析。
接口限时免费,欢迎进行体验与咨询反馈!个人实名可获取免费测试资源200页,企业实名可获取免费测试资源1000页。
文档解析(Unlimited-OCR)API服务为异步接口,需要先调用提交请求接口获取 task_id,然后调用获取结果接口进行结果轮询,建议提交请求后 5~10 秒轮询。提交请求接口QPS为2,获取结果接口QPS为5。
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
为方便您更好地使用文档解析服务,我们设立了专属交流群。您可通过下方二维码入群:

提交请求接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
| 参数 | 值 |
|---|---|
| Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
| 参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
|---|---|---|---|---|
| file_data | 和file_url二选一 | string | - | 文件的base64编码数据:-版式文档:pdf、ofd、ppt、pptx-流式文档:doc、docx、txt、wps、ppt、pptx、ods、tsv、rtf、odt、odp-图片文档:jpg、jpeg、png、bmp、tif、tiff、webp、gif、ico、svg,图片最长边不大于8192px图片不超过10M,流式文档大小不超过50M,其中PDF文档最大支持500页若文档大小超过50M,须从file_url方式上传。优先级: file_data > file_url,当file_data字段存在时,file_url字段失效 |
| file_url | 和file_data二选一 | string | - | 文件数据URL,URL长度不超过1024字节,支持单个URL传入PDF文档大小不超过100M,最大支持500页优先级: file_data > file_url,当file_data字段存在时,file_url字段失效请注意关闭URL防盗链 |
| file_name | 是 | string | - | 文件名,请保证文件名后缀正确,例如 "申请表.pdf " |
| angle_adjust | - | bool | - | 是否进行角度矫正,默认为true |
| angle_mode | - | string | direction/arbitrary | 角度矫正模式,开启角度矫正后生效,默认为 direction,可选: - direction:四方向 - arbitrary:任意方向 |
| erase_seal | - | bool | - | 是否擦除印章,默认为False |
| erase_watermark | - | bool | - | 是否擦除水印,默认为False |
| unwarp | - | bool | - | 是否进行图像扭曲矫正,默认为False |
| page_filter | - | list[int] | - | 指定页码进行解析,默认解析全部页数。页码从0开始,[1, 3] 表示第 2、4 页 |
| need_pdffile_data | - | bool | - | 返回整份PDF,默认为False |
| need_pdffile_vis_data | - | bool | - | 当开启角度矫正、水印擦除等预处理能力后,是否输出处理后的PDF,默认为False |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、文档地址或Base64信息。
1import base64
2import os
3
4import requests
5
6API_KEY = "你的API_KEY"
7SECRET_KEY = "你的SECRET_KEY"
8FILE_PATH = "./test_sample/doc-0emc2uejide48tnp.jpg"
9
10
11def get_access_token():
12 url = "https://aip.baidubce.com/oauth/2.0/token"
13 params = {
14 "grant_type": "client_credentials",
15 "client_id": API_KEY,
16 "client_secret": SECRET_KEY,
17 }
18 return requests.get(url, params=params, timeout=30).json()["access_token"]
19
20
21def create_task(url, file_path):
22 with open(file_path, "rb") as f:
23 file_data = base64.b64encode(f.read()).decode()
24
25 data = {
26 "file_data": file_data,
27 "file_name": os.path.basename(file_path),
28 }
29 headers = {"Content-Type": "application/x-www-form-urlencoded"}
30 return requests.post(url, headers=headers, data=data, timeout=120)
31
32
33if __name__ == "__main__":
34 access_token = get_access_token()
35 url = (
36 "https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task"
37 f"?access_token={access_token}"
38 )
39 response = create_task(url, FILE_PATH)
40 print(response.json())
返回说明
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| log_id | uint64 | 唯一的log id,用于问题定位 |
| error_code | int | 错误码 |
| error_msg | string | 错误描述信息 |
| result | dict | 返回的结果列表 |
| + task_id | string | 该请求生成的task_id,后续使用该task_id获取解析结果 |
返回示例 成功返回示例:
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "10138598131137362685273505665433",
5 "result": {
6 "task_id": "task-3zy9Bg8CHt1M4pPOcX2q5bg28j26801S"
7 }
8}
失败返回示例(详细的错误码说明见API文档-错误码):
1{
2 "error_code": 282003,
3 "error_msg": "missing parameters",
4 "log_id": "37507631033585544507983253924141",
5 "result": "null"
6}
获取结果接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task/query
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
| 参数 | 值 |
|---|---|
| Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| task_id | 是 | string | 发送提交请求时返回的task_id |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、task_id。
1import requests
2
3API_KEY = "你的API_KEY"
4SECRET_KEY = "你的SECRET_KEY"
5TASK_ID = "task_id" # 替换为提交接口返回的 task_id
6
7
8def get_access_token():
9 url = "https://aip.baidubce.com/oauth/2.0/token"
10 params = {
11 "grant_type": "client_credentials",
12 "client_id": API_KEY,
13 "client_secret": SECRET_KEY,
14 }
15 return requests.get(url, params=params, timeout=30).json()["access_token"]
16
17
18def query_task(url, task_id):
19 data = {"task_id": task_id}
20 headers = {"Content-Type": "application/x-www-form-urlencoded"}
21 return requests.post(url, headers=headers, data=data, timeout=60)
22
23
24if __name__ == "__main__":
25 access_token = get_access_token()
26 url = (
27 "https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task/query"
28 f"?access_token={access_token}"
29 )
30 resp = query_task(url, TASK_ID)
31 print(resp.json())
返回说明
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| log_id | uint64 | 唯一的log id,用于问题定位 |
| error_code | int | 错误码 |
| error_msg | string | 错误描述信息 |
| result | dict | 返回的结果列表 |
| + task_id | string | 任务ID |
| + status | string | 任务状态,pending:排队中;running:运行中;success:成功;failed:失败 |
| + task_error | string | 解析报错信息,包含任务失败、额度不够 |
| + markdown_url | string | 文档解析结果的 markdown 格式链接,链接有效期30天 |
| + parse_result_url | string | 文档解析结果的 JSON bos 链接,链接有效期30天 |
提交成功只代表任务已创建。请继续轮询 status:pending、running 时等待,success 时下载结果,failed 时读取 task_error;不要把 error_code=0 单独作为解析完成的判断条件。
返回示例 成功返回示例:
1{
2 "log_id": "29930897413861761082808408258781",
3 "error_code": 0,
4 "error_msg": "success",
5 "result":
6 {
7 "task_id": "task-pL7j006Bmn58rtTVD20oxT4DYkMf1Khm",
8 "status": "success",
9 "task_error": null,
10 "markdown_url": "https://example.invalid/result.md",
11 "parse_result_url": "https://example.invalid/result.json",
12 "cost_page_num": 1
13 }
14}
任务不存在返回示例:
1{
2 "log_id": "29941818126576949541124183879498",
3 "error_code": 282007,
4 "error_msg": "task not exist, please check task id",
5 "result": null
6}
更多错误码参见API 文档错误码。查询超时不代表任务失败,可保留 task_id 后继续查询,避免重复提交。
可通过parse_result_url下载解析结果的JSON文件,parse_result_url的返回参数如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| file_name | string | 文档名称 |
| file_id | string | 文档ID |
| pdf_data | string | need_pdffile_data=true 时返回的PDF文件下载地址,链接有效期30天 |
| pdf_vis_data | string | need_pdffile_vis_data=true 时返回的文档预处理后的PDF下载链接,链接有效期30天 |
| pages | list | 文件单页解析内容 |
| + page_id | string | 页面ID |
| + page_num | int | 原文件页面序号,从0开始;设置指定页解析后不重新编号 |
| + page_angle | int | 旋转角度值,取值0~359 |
| ++ text | string | 当前页文本内容,可能包含公式标记、表格 HTML 等 |
| + markdown | string | 当前页 Markdown 内容;整份文档结果优先使用 markdown_url |
| ++ layouts | list | 页面内容版式分析的结果 |
| ++ layout_id | string | layout ID,layout元素唯一标志,以"xxxxx-layout-{global_layout_index}"形式,global_layout_index为layout元素整个文档的全局索引 |
| ++ text | string | layout版面对应的文本内容 |
| ++ position | list | layout版面元素在页面中的位置,[x, y, w, h] box框,左上角和宽高 |
| ++ polygon | list | layout元素在页面中的顶点坐标列表,如 [[x1,y1],[x2,y2],[x3,y3],[x4,y4]] |
| ++ type | string | layout元素类型, 当前可取值: • title:标题 • text:文本 • table:表格 • image:图片 • image_caption:图片标题 • image_footnote:图片脚注 • equation:公式 • header:页眉 • footer:页脚 • page_number:页码 • aside_text:旁注文本 • seal:印章 |
| ++ sub_type | string | 版面子类型;标题可为 title_1、title_2 等层级标记,也可能为空字符串。type仍为 title |
| ++ merge_text | string | 文本拼接标记,可为 begin、inner、end 或空字符串 |
| ++ merge_column | string | 分栏文本拼接标记,可为merge或空字符串;不代表表格合并 |
| + tables | list | 页面表格解析结果 |
| ++ layout_id | string | 表格的layout ID,与layouts中的元素type为table的元素的layout ID对应 |
| ++ markdown | string | 表格内容的markdown形式 |
| ++ table_html | string | 表格的 HTML 表示;需要保留单元格合并结构时优先使用 |
| ++ position | list | 边框数据 「x, y, w, h」(x, y)为坐标点坐标,w为box宽度,h为box高度(以页面坐标为原点),版式格式时有效 |
| ++ cells | list | 单元格列表,layout类型为表格时有值 |
| +++ layout_id | string | 单元格标识 |
| +++ text | string | 单元格内容 |
| +++ type | string | 单元格内容类型 |
| +++ position | array/null | 单元格位置 |
| +++ polygon | array/null | 单元格多边形坐标 |
| +++ matrix | list | 二位数组,表示表格内布局位置信息,每个元素对应cells列表中元素的索引 |
| +++ merge_table | string | 合并表格标识,开启merge_tables后生效,跨页表格开始(begin),跨页表格结束(end) |
| ++ images | list | 页面中图片解析结果 |
| +++ layout_id | string | layout ID,与layouts中的元素type为image的元素的layout ID对应 |
| +++ position | list | 边框数据 「x, y, w, h」(x, y)为坐标点坐标,w为box宽度,h为box高度(以页面坐标为原点),版式格式时有效 |
| +++ data_url | string | 图片存储链接 |
| ++ meta | dict | 页面元信息 |
| +++ page_width | int | 页面宽度 |
| +++ page_height | int | 页面高度 |
表格结构示例
以下是索引规则示意,并非完整接口响应。cells 共 5 项,合法索引为 0~4;首行跨两列的单元格 0 在 matrix 中重复出现。
1{
2 "cells": [
3 {"text": "合并表头"},
4 {"text": "备注"},
5 {"text": "A"},
6 {"text": "B"},
7 {"text": "C"}
8 ],
9 "matrix": [
10 [0, 0, 1],
11 [2, 3, 4]
12 ]
13}
页面结果示例
1{
2 "file_name": "example.png",
3 "file_id": "file-example",
4 "pages": [
5 {
6 "page_id": "page-example",
7 "page_num": 0,
8 "page_angle": 0,
9 "layouts": [
10 {
11 "layout_id": "layout-example",
12 "type": "title",
13 "sub_type": "",
14 "text": "数学 第五节练习",
15 "position": [55, 103, 230, 33],
16 "polygon": [[55, 103], [285, 103], [285, 136], [55, 136]]
17 }
18 ],
19 "tables": [],
20 "images": [],
21 "meta": {
22 "page_width": 1240,
23 "page_height": 1754
24 }
25 }
26 ]
27}
Markdown 结果示例
1# 星河园区设备巡检计划
2
3## 1. 巡检安排
4
5本计划用于演示文档解析结果的 Markdown 展示,巡检区域、设备编号和日期均为合成数据。
6
7| 日期 | 区域 | 设备 | 状态 | 备注 |
8| --- | --- | --- | --- | --- |
9| 2026-10-08 | A 区 | 温控器 T-01 | 正常 | - |
10| 2026-10-08 | B 区 | 照明控制器 L-03 | 待复核 | 检查备用电源 |
11| 2026-10-09 | C 区 | 门禁终端 D-02 | 正常 | - |
12
13## 2. 处理说明
14
15- 发现异常时记录设备编号和所在区域。
16- 复核完成后更新状态字段。
失败返回示例(详细的错误码说明见API文档-错误码):
1 {"log_id": "13665091038742503867108513247608",
2 "error_code": "282007",
3 "error_msg": "task not exist, please check task id",
4 "result": "null"}
评价此篇文章
