技术博客
PDF文件正文抽取:返回字段全解(text / ret_code / remark)

PDF文件正文抽取:返回字段全解(text / ret_code / remark)

作者: 万维易源
2026-09-02
PDF正文抽取返回字段ret_codetext字段
# PDF文件正文抽取:返回字段全解(text / ret_code / remark) > 接口 PDF文件正文抽取(apiCode=10,接入点 10-1) · 免费服务 · 请求方式 POST · 返回格式 JSON · 适用人群 已接入或准备接入的开发者 · 阅读时间 约 4 分钟 ## 核心要点 - ShowAPI 的返回采用「系统级字段 + `showapi_res_body` 业务封装」两层结构,业务数据都在 `showapi_res_body` 内。 - 本接口业务字段只有三个:`ret_code`(状态)、`text`(正文)、`remark`(备注)。 - 文档**未公布完整错误码枚举**,排查时以系统级 `showapi_res_code` 与帮助手册为准。 ## Why:为什么要先搞懂返回结构 调用任何 API,第一件事不是「怎么发请求」,而是「怎么读懂返回」。PDF文件正文抽取接口的返回被系统包了两层:外层是 ShowAPI 通用字段,内层 `showapi_res_body` 才是你要的抽取结果。搞不清这层关系,很容易把 `showapi_res_code` 当业务码、或找不到正文到底在哪。本文把每一层、每个字段讲清楚。 ## What:接口返回速览 | 项目 | 说明 | |------|------| | 返回格式 | JSON | | 业务数据位置 | `showapi_res_body` 对象内 | | 业务字段 | `ret_code`(String)、`text`(String)、`remark`(String) | | 系统级字段 | `showapi_res_code`、`showapi_res_error`、`showapi_res_id`、`showapi_fee_num` | ## How:如何逐层解析 **步骤 1 — 先看系统级 `showapi_res_code`** 值为 `0` 表示请求在系统层面成功(鉴权通过、路由正常)。非 0 表示系统级失败,错误信息在 `showapi_res_error`。 **步骤 2 — 再进 `showapi_res_body` 看业务级 `ret_code`** 业务级 `ret_code` 是字符串 `"0"` 表示业务成功。非 `"0"` 时,通常 `remark` 会给出说明。 **步骤 3 — 取用 `text`** 业务成功后,`text` 即抽取到的正文;为空字符串时需排查 PDF 是否含文字层(见 [PDF文件正文抽取:能力边界与避坑](https://www.showapi.com/guides/pdf-extract-limits-10))。 Python 解析示例: ```python import requests resp = requests.post( "https://route.showapi.com/10-1?appKey=YOUR_APPKEY", files={"pdf": open("example.pdf", "rb")}, timeout=10, ).json() if resp.get("showapi_res_code") != 0: raise RuntimeError("系统级错误: " + str(resp.get("showapi_res_error"))) body = resp["showapi_res_body"] if body.get("ret_code") != "0": raise RuntimeError("业务错误: " + str(body.get("remark"))) text = body.get("text") # 抽取到的正文 ``` ## 返回示例与解析 完整返回示例: ```json { "showapi_res_error": "", "showapi_fee_num": 1, "showapi_res_code": 0, "showapi_res_id": "66163322fb638c08b8363af5", "showapi_res_body": { "ret_code": "0", "text": "这里是 PDF 中抽出的正文……", "remark": "" } } ``` 字段对照表: | 字段 | 层级 | 类型 | 成功示例值 | 说明 | |------|------|------|-----------|------| | `showapi_res_code` | 系统级 | 数值 | `0` | 系统级状态码,0 为成功 | | `showapi_res_error` | 系统级 | 字符串 | `""` | 系统级错误描述 | | `showapi_res_id` | 系统级 | 字符串 | `66163322…` | 本次请求唯一 ID | | `showapi_fee_num` | 系统级 | 数值 | `1` | 本次计费条数 | | `ret_code` | 业务级 | String | `"0"` | 业务状态码,字符串 `"0"` 为成功 | | `text` | 业务级 | String | `"…正文…"` | 抽取出的正文文本 | | `remark` | 业务级 | String | `""` | 备注/业务说明 | ## 进阶 / 边界 - **错误码枚举未公布**:文档仅给出成功示例(`ret_code="0"`),未列出失败枚举值。因此**切勿在代码里硬编码一组「已知错误码」做穷举判断**;遇到非 `"0"` 时,直接读取 `remark` 文本并上报即可。 - **类型陷阱**:`ret_code` 是字符串 `"0"`,比较时请用 `body["ret_code"] != "0"`,不要用 `!= 0`(数值比较会恒为真)。 - **审计**:`showapi_res_id` 可用于向官方追溯某次请求,排查异常时一并提交。 ## FAQ **Q:`showapi_res_code` 和 `ret_code` 有什么区别?** A:前者是 ShowAPI 平台级状态(鉴权、路由、计费),后者是本接口业务级状态。两层都要判 0/“0” 才算真正成功。 **Q:为什么 `ret_code` 是字符串而不是数字?** A:这是该接口文档定义的类型(String),比较时务必用字符串 `"0"` 判断,避免类型误判。 **Q:失败了去哪查错误含义?** A:先看 `remark` 与 `showapi_res_error` 的原文;若仍无法定位,参考 [使用向导(帮助手册)](https://www.showapi.com/helpcenter/view#/3960/1) 或控制台工单,文档未提供独立的错误码字典。 **Q:`text` 为空但 `ret_code="0"` 算成功吗?** A:接口层面算成功(它确实「处理完」了这个 PDF),正文为空通常是源文件无文字层,属业务边界而非接口报错,详见能力边界篇。 ## 相关能力 / 下一步阅读 - [PDF文件正文抽取:5 分钟从注册到跑通第一条抽取结果](https://www.showapi.com/guides/pdf-extract-quickstart-10) - [PDF文件正文抽取:能力边界与避坑(扫描件/特殊排版如何处理)](https://www.showapi.com/guides/pdf-extract-limits-10) - **本系列共 10 篇**:查看[PDF文件正文抽取指南总目录](https://www.showapi.com/guides/pdf-extract-guides-10)