教你使用服务器搭建一款基于 FastAPI 的 PDF 文档提取和解析工具pdf
莱卡云
2025年11月20日 16:23
云服务器教程

在日常工作里,不管你是做开发、运营、财务、知识库、档案整理,

只要碰到 PDF 文件,大概率都会头疼:

  • 内容不能直接复制

  • 表格排版混乱

  • 大量文件需要批量解析

  • 一份 PDF 几百页,人工整理太慢

pdf-extract-api 就是一款专门为开发者和团队准备的开源工具,

基于 FastAPI 搭建,轻量、稳定、可扩展,通过 API 的方式即可实现:

✔ 文本提取

✔ 图片提取

✔ 表格解析

✔ 元数据提取

✔ 批量解析任务

✔ 自定义解析策略

更重要的是,它能部署在自己的服务器上,

不依赖第三方服务,不上传敏感文件,数据更安全。

接下来,我就带你用 莱卡云服务器

从零开始搭建一个可在线、可远程访问的 pdf-extract-api 服务。

一、pdf-extract-api 能做什么?

这类 PDF API 工具非常适用以下场景:

1. PDF 文本提取

自动从 PDF 中提取所有纯文本,非常适合做:

  • 搜索引擎索引

  • 自动写摘要

  • 自动问答系统(Bot)

  • 数据挖掘

2. 表格提取(结构化数据)

PDF 里的表格是最麻烦的部分,pdf-extract-api 能自动识别表格并转成:

  • JSON

  • CSV

  • 矩阵格式

非常适合财务报表、购买记录、合同台账。

3. 图片抽取

可以从文档中抽出所有图片资源,用于:

  • 封面查重

  • 内部审计

  • 二次图像识别

4. 元数据解析

包括标题、作者、生成器、页数、字体等信息。

5. 批量解析任务

你可以一次丢几十个或上百个 PDF,让 API 在后台自动解析。

二、为什么要部署在莱卡云服务器?

本地部署虽然能跑,但存在:

  • 电脑性能有限,批量任务容易卡

  • 本地网络不稳定

  • 不方便团队共享

  • 不能 7×24 小时提供 API 服务

部署到云服务器:

✔ 可长期运行,不中断

FastAPI 服务会一直保持在线。

✔ 不占用本地资源

本地只负责发请求,解析全部丢给服务器处理。

✔ 团队共享更方便

多个同事可以统一调用 API。

✔ 更安全

所有 PDF 都存储在你的服务器,不会外泄。

因此非常适合企业内部系统、自动化系统、知识库、财务文件解析等场景。

三、准备一台合适的服务器

为 PDF 解析工具推荐的配置:

  • 2~4 核 CPU(文本解析很吃 CPU)

  • 8GB 内存 起步

  • 40GB SSD(PDF 文件体积普遍较大)

  • 系统:Ubuntu 22.04 或 Debian 12

  • 带宽:10Mbps 以上即可

在莱卡云这样的节点上部署,会更加稳定。

四、服务器基础环境安装

更新系统:

sudo apt update sudo apt upgrade -y

安装依赖:

sudo apt install -y git python3 python3-venv python3-pip poppler-utils

其中:

  • poppler-utils 是 PDF 文本提取工具(pdftotext 等)

  • Python 用于运行 FastAPI 服务端

五、上传 pdf-extract-api 到服务器(无链接)

你可以在本地把项目打包后上传:

scp pdf-extract-api.zip root@服务器IP:/opt/

进入目录并解压:

cd /opt unzip pdf-extract-api.zip cd pdf-extract-api

六、创建虚拟环境 & 安装依赖

python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt

FastAPI 会自动安装包括:

  • Uvicorn

  • PDF 解析工具包

  • 表格识别组件

  • 文档解析算法

七、启动 FastAPI 服务(核心步骤)

source venv/bin/activate uvicorn api:app --host 0.0.0.0 --port 8000

如果项目入口是 main.py,则替换为:

uvicorn main:app --host 0.0.0.0 --port 8000

启动后会输出:

Running on http://0.0.0.0:8000

你可以访问:

http://你的服务器IP:8000/docs

就能看到 FastAPI 提供的可交互 API 文档页面。

(这一点非常好用:上传 PDF、调用 API、参数,都能在页面上直接调试。)

八、实际使用:一份 PDF 的完整解析流程

下面帮你模拟一个从上传到解析的真实场景。

上传 PDF 文件

在 /docs 里找到:

  • /extract_text

  • /extract_images

  • /extract_tables

这三个接口通常都支持文件上传。

选择解析功能

例如在 /extract_text 裡上传一个合同 PDF:

服务器会自动输出:

  • 所有文本内容

  • 页码信息

  • 原格式大致结构(按空行与段落)

提取表格(非常实用)

访问 /extract_tables

上传一份财务报表,它可能会自动识别:

[ { "page": 1, "table_index": 0, "data": [ ["日期", "项目", "金额"], ["2023/05/01", "设备采购", "¥ 18200"], ["2023/06/10", "服务器续费", "¥ 5200"] ] } ]

这就很适合导入数据库进行二次分析。

提取图片资源

/extract_images 会返回所有内嵌图片,比如:

  • PDF 封面

  • 插图

  • 扫描文档的原图分块

这些可以用于审计、素材复用、OCR 加工。

九、进阶玩法(这是服务器部署的真正价值)

如果你在莱卡云服务器上跑 pdf-extract-api,还可以做更多事情:

✔ 批量处理上传目录

例如监控 /data/pdfs/input

任何上传 PDF → 自动解析 → 产出 JSON。

✔ 将解析结果接入你自己的系统

如:

  • 企业 ERP

  • 文档管理系统

  • 知识库问答系统

✔ 配合大模型自动总结 / 生成问答

从 PDF 提取文本 → 大模型总结成 QA → 存库

可快速生成企业知识问答库。

✔ 与对象存储配套使用

解析结果自动上传 OSS,方便长期保存。

✔ 作为内部微服务使用

团队里任何人都能通过 API 带 PDF 来解析。

十、使用建议(来自真实经验)

  • 批量解析建议使用异步任务(Celery/RQ)

  • 对扫描版 PDF 结合 OCR 效果更好

  • 大文件建议限制上传大小,避免打满服务器

  • 表格解析不完美时,可自定义参数优化

  • 强烈建议使用 tmux/screen 运行服务,防止 SSH 掉线