PDF文件正文抽取:把抽取结果转存为 TXT / DOCX
PDF转TXTPDF转DOCXpython-docx文本导出 # PDF文件正文抽取:把抽取结果转存为 TXT / DOCX
> 接口 PDF文件正文抽取(apiCode=10,接入点 10-1) · 免费服务 · 请求方式 POST · 返回格式 JSON · 适用人群 开发者、办公族、文档处理人员 · 阅读时间 约 5 分钟
## 核心要点
- 接口返回的是 `text` 纯文本字符串,本身不含格式;「保存为 TXT / DOCX」是**客户端**拿到文本后的下游动作。
- 存 TXT 用标准库即可;存 DOCX 需借助 `python-docx` 等本地库。
- 注意编码(统一 `utf-8`)与分段落换行,避免挤成一团。
## Why:为什么要转存
接口抽出的 `text` 如果在程序里用完就丢,价值有限。真正有用的是把它落盘成可编辑、可分享的文件——TXT 方便程序再处理,DOCX 方便发给同事用 Word 直接改。本文讲清「拿到 `text` 之后怎么变成文件」。
## What:两种落盘方式
| 目标格式 | 所需能力 | 复杂度 |
|----------|---------|--------|
| TXT | 文件写入(标准库) | 极低 |
| DOCX | `python-docx` 等本地库 | 低 |
> 说明:接口本身只负责「PDF → 文本」,**不直接生成 DOCX 文件**;DOCX 是在你本地用库把 `text` 写进去的。
## How:从 `text` 到文件
**方式一:保存为 TXT(推荐,零依赖)**
```python
import requests
def extract_text(pdf_path):
resp = requests.post(
"https://route.showapi.com/10-1?appKey=YOUR_APPKEY",
files={"pdf": open(pdf_path, "rb")},
timeout=15,
).json()
if resp.get("showapi_res_code") != 0:
raise RuntimeError(resp.get("showapi_res_error"))
body = resp["showapi_res_body"]
if body.get("ret_code") != "0":
raise RuntimeError(body.get("remark"))
return body.get("text", "")
text = extract_text("example.pdf")
with open("example.txt", "w", encoding="utf-8") as f:
f.write(text)
```
**方式二:保存为 DOCX(需 `pip install python-docx`)**
```python
from docx import Document
# text 为上文抽取到的正文
doc = Document()
for para in text.split("\n"): # 按换行切成段落,保留原文结构
if para.strip():
doc.add_paragraph(para)
doc.save("example.docx")
```
## 返回示例与解析
`text` 是一段连续的字符串,段落之间通常以换行符分隔(具体取决于源 PDF 的文字层)。落盘时按 `\n` 切分即可还原大致段落;若源文件排版复杂,可能需额外的后处理规则。
## 进阶 / 边界
- **编码统一 utf-8**:写文件、读文件都显式指定 `encoding="utf-8"`,避免 Windows 默认 GBK 下中文乱码。
- **段落还原**:`text` 无样式信息;若需保留标题层级,可结合正则识别「全大写/编号行」做粗粒度分级,但属于后处理,非接口能力。
- **大文本**:超长 `text` 建议分块写入,避免单次内存峰值。
## FAQ
**Q:接口能直接返回 .docx 文件吗?**
A:不能。返回的是 `text` 纯文本,DOCX 需在你本地用 `python-docx` 这类库把文本写进去。
**Q:抽出来的文本没有换行、连成一坨?**
A:取决于源 PDF 文字层是否带换行信息;可在拿到 `text` 后用正则(如按句号/空行)做后处理切分。
**Q:中文出现乱码?**
A:几乎都是编码问题,写文件时强制 `encoding="utf-8"` 即可。
**Q:能不能顺便保留原 PDF 的表格?**
A:接口返回的是扁平文本,不保留表格结构;表格还原需额外的版面分析能力,不在本接口范围内。
## 相关能力 / 下一步阅读
- [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)