PDF文件正文抽取:5 分钟从注册到跑通第一条抽取结果
PDF正文抽取快速接入Python示例cURLNode.js # PDF文件正文抽取:5 分钟从注册到跑通第一条抽取结果
> 接口 PDF文件正文抽取(apiCode=10,接入点 10-1) · 免费服务 · 请求方式 POST · 返回格式 JSON · 适用人群 新注册用户、初级开发者、普通办公族 · 阅读时间 约 5 分钟
## 核心要点
- 接口只需传一个**必填参数 `pdf`(File 类型)**,其余由系统统一封装。
- 抽取到的正文在 `showapi_res_body.text` 字段中返回。
- 属于**免费服务**,注册即有默认调用档位,非常适合快速试水。
## Why:这跟我有什么关系
日常里经常遇到「PDF 里全是文字,但没法直接选中复制、没法全文搜索、想整理进笔记却只能截图」的窘境——论文、合同、报告、发票、说明书都在此列。PDF文件正文抽取接口把这件事变成一次 HTTP 调用:你上传 PDF,它返回纯文本,剩下的编辑、检索、分析都交给你的工具链。
对开发者来说,这意味着不用再为「怎么把 PDF 变成文字」自己搭一套解析环境;对办公族来说,这意味着选中、复制、搜索这些基础操作重新可用。
## What:前置条件与接口速览
| 项目 | 说明 |
|------|------|
| 接口名称 | PDF文件正文抽取 |
| 接口编号 / 接入点 | apiCode=10 / 接入点 10-1 |
| 服务商 | 昆明秀派科技有限公司(官方自营) |
| 请求地址 | `https://route.showapi.com/10-1?appKey={your_appKey}` |
| 请求方式 | POST(multipart/form-data) |
| 返回格式 | JSON |
| 计费 | 免费服务(注册后默认可调用,含使用档次限制) |
| 必填参数 | `pdf`(File) |
| 集成能力 | MCP 服务、OpenAPI 3.0 文档 |
**前置条件**:一个 ShowAPI 账号与一对 AppKey(在控制台「我的应用」获取)。
## How:四步跑通
**步骤 1 — 获取 AppKey**
登录后在 [AppKey 管理页](https://www.showapi.com/console#/myApp) 创建应用,复制 `appKey`。
**步骤 2 — 准备一个 PDF 文件**
任意一份包含文字层的 PDF 即可,例如 `example.pdf`。
**步骤 3 — 发起调用**
下面三段代码任选其一,把 `YOUR_APPKEY` 替换成你的真实 AppKey、把文件路径改成你的 PDF 即可运行。
Python(requests):
```python
import requests
url = "https://route.showapi.com/10-1"
params = {"appKey": "YOUR_APPKEY"} # 替换为你的真实 AppKey
files = {"pdf": open("example.pdf", "rb")} # 必填:PDF 文件
try:
resp = requests.post(url, params=params, files=files, timeout=10)
resp.raise_for_status()
data = resp.json()
except Exception as e:
print("请求失败:", e)
raise
if data.get("showapi_res_code") != 0:
print("系统级错误:", data.get("showapi_res_error"))
else:
body = data["showapi_res_body"]
if body.get("ret_code") != "0":
print("业务错误:", body.get("remark"))
else:
print(body.get("text")) # 抽取到的正文
```
cURL:
```bash
curl -X POST "https://route.showapi.com/10-1?appKey=YOUR_APPKEY" \
-F "pdf=@/path/to/example.pdf"
```
Node.js:
```javascript
const fs = require("fs");
(async () => {
const form = new FormData();
form.append("pdf", fs.createReadStream("example.pdf"));
const resp = await fetch("https://route.showapi.com/10-1?appKey=YOUR_APPKEY", {
method: "POST",
body: form,
});
const data = await resp.json();
if (data.showapi_res_code !== 0) {
console.error("系统级错误:", data.showapi_res_error);
} else {
const body = data.showapi_res_body;
if (body.ret_code !== "0") console.error("业务错误:", body.remark);
else console.log(body.text);
}
})();
```
**步骤 4 — 解析返回**
返回的 JSON 里,真正的内容在 `showapi_res_body.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 表示系统级成功 |
| `showapi_res_error` | 系统级 | 字符串 | 系统级错误信息 |
| `showapi_res_body` | 系统级 | 对象 | 业务数据均封装于此 |
| `ret_code` | 业务级 | String | `"0"` 表示业务成功 |
| `text` | 业务级 | String | 抽取出的正文文本 |
| `remark` | 业务级 | String | 备注信息 |
## 进阶 / 边界
- **超时**:示例统一设 10 秒;大文件建议适当延长并加重试。
- **错误处理**:务必先判 `showapi_res_code`(系统级),再判 `showapi_res_body.ret_code`(业务级),二者都为成功才消费 `text`。
- **免费档位**:免费调用有「使用档次限制」,高频/批量场景请看 [PDF文件正文抽取:免费档位限制与频率/成本控制](https://www.showapi.com/guides/pdf-extract-free-tier-10)。
## FAQ
**Q:提示缺少必填参数怎么办?**
A:确认请求体里带上了 `pdf` 字段且为 File 类型(cURL 用 `-F "pdf=@文件"` 而非 `-d`)。该参数是唯一必填项。
**Q:返回的 `text` 是空字符串?**
A:可能 PDF 本身没有可抽取的文字层(如纯图片扫描件)。具体边界见 [PDF文件正文抽取:能力边界与避坑](https://www.showapi.com/guides/pdf-extract-limits-10)。
**Q:免费调用有次数限制吗?**
A:文档说明为免费服务且「为防止滥用设有使用档次限制」,具体档位以 [官方免费 API 档位说明](https://www.showapi.com/free-api) 为准,本文不编造具体数字。
**Q:AppKey 泄露了怎么办?**
A:到 [AppKey 管理页](https://www.showapi.com/console#/myApp) 重置即可;代码中务必用占位符,不要硬编码真实 key。
## 相关能力 / 下一步阅读
- [PDF文件正文抽取:返回字段全解(text / ret_code / remark)](https://www.showapi.com/guides/pdf-extract-response-10)
- [PDF文件正文抽取:学术论文与文献 PDF 批量抽取实战](https://www.showapi.com/guides/pdf-extract-academic-10)
- **本系列共 10 篇**:查看[PDF文件正文抽取指南总目录](https://www.showapi.com/guides/pdf-extract-guides-10)