🚀 一站式PDF文档处理解决方案 - 基于 DeepSeek-OCR 的高精度文档转换平台,提供PDF转Markdown、格式转换、编辑处理等全方位服务。
- PDF → Markdown - 基于DeepSeek-OCR的高精度转换,完美保持文档结构和格式
- 多语言支持 - 智能识别中文、英文等多种语言文档
- 格式保留 - 精准还原表格、图片、公式等复杂元素
-
格式转换
- PDF → DOCX (Word文档)
- PDF → JPG (图片序列)
- Word/Excel → PDF (Windows平台)
- 图片 → PDF (批量合并)
-
文档处理
- PDF 合并 - 多文档无缝整合
- PDF 拆分 - 按页精确分离
- PDF 压缩 - 智能优化文件大小
- 批量处理 - 多文件同时操作
- 现代化界面 - 简洁直观的Web设计,支持深色/浅色主题
- 拖拽上传 - 零学习成本,拖拽即用
- 实时进度 - 处理状态实时显示,进度条可视化
- 批量管理 - 支持多文件同时处理,结果打包下载
- 历史记录 - 完整的操作历史,支持重试和删除
- 老年人友好 - 专为老年用户设计的使用帮助页面,大字体、清晰步骤
- RESTful API - 完整的API接口,易于系统集成
- 异步处理 - 高性能异步架构,支持大文件处理
- Swagger文档 - 自动生成的API文档,支持在线测试
- 错误处理 - 完善的异常处理和日志记录
- Docker支持 - 一键部署,跨平台运行
- Python 3.8+
- 8GB+ 内存(推荐用于大文件处理)
- 2GB+ 可用磁盘空间
# 克隆项目
git clone <repository-url>
cd pdf-platform
# 安装依赖
pip install -r requirements.txt
# 启动服务
python start_server.py# 构建镜像
docker build -t pdf-platform .
# 运行容器
docker run -p 8000:8000 -v $(pwd)/models:/app/models pdf-platform| 功能 | 地址 | 说明 |
|---|---|---|
| 主页 | http://localhost:8000 | 欢迎页面,包含所有功能入口 |
| 工具箱 | http://localhost:8000/pdf-tools | 全功能PDF处理中心,包含使用帮助 |
| API文档 | http://localhost:8000/docs | Swagger交互式文档 |
| API接口 | http://localhost:8000/api | RESTful API端点 |
# 开发模式(自动重载)
python start_server.py --reload
# 自定义端口
python start_server.py --port 9000
# 自定义主机
python start_server.py --host 127.0.0.1- 访问主页 → http://localhost:8000
- 上传PDF → 拖拽或选择文件,支持50MB以内
- 自动处理 → AI自动识别文档结构和内容
- 预览下载 → 实时预览转换结果,一键下载
-
选择操作 → 从8种处理方式中选择
- 🔄 格式转换:PDF→DOCX/JPG/Word/Excel
- 🔗 文档合并:多PDF合并为单个文件
- ✂️ 文档拆分:按页精确分离PDF
- 📦 智能压缩:优化文件大小
- 🖼️ 图片转PDF:批量图片整合
-
批量上传 → 支持多文件同时处理
-
实时监控 → 进度条显示处理状态
-
结果下载 → 自动打包为ZIP文件
import requests
# 1. 上传PDF文件
with open("document.pdf", "rb") as f:
upload_resp = requests.post(
"http://localhost:8000/api/upload",
files={"file": f}
)
task_id = upload_resp.json()["task_id"]
# 2. 启动AI转换
requests.post(f"http://localhost:8000/api/convert/{task_id}")
# 3. 轮询处理状态
while True:
status_resp = requests.get(f"http://localhost:8000/api/status/{task_id}")
data = status_resp.json()
if data["status"] == "completed":
break
elif data["status"] == "failed":
raise Exception(data["error"])
# 4. 下载Markdown结果
download_resp = requests.get(f"http://localhost:8000/api/download/{task_id}")
with open("output.md", "w", encoding="utf-8") as f:
f.write(download_resp.text)
print("✅ 转换完成!")import requests
import json
# 1. 获取可用操作列表
ops_resp = requests.get("http://localhost:8000/api/pdf/operations")
operations = ops_resp.json()["operations"]
print("可用操作:", json.dumps(operations, indent=2, ensure_ascii=False))
# 2. 批量上传文件
files = [
("files", open("doc1.pdf", "rb")),
("files", open("doc2.pdf", "rb")),
("files", open("image.jpg", "rb"))
]
upload_resp = requests.post(
"http://localhost:8000/api/pdf/upload-multiple",
files=files
)
task_id = upload_resp.json()["task_id"]
# 3. 执行合并操作
process_resp = requests.post(
f"http://localhost:8000/api/pdf/process/{task_id}?operation=merge_pdfs"
)
# 4. 监控处理进度
while True:
status_resp = requests.get(f"http://localhost:8000/api/status/{task_id}")
data = status_resp.json()
print(f"进度: {data['progress']}% - 状态: {data['status']}")
if data["status"] == "completed":
# 下载ZIP结果包
download_resp = requests.get(f"http://localhost:8000/api/download/{task_id}")
with open("results.zip", "wb") as f:
f.write(download_resp.content)
print("🎉 批量处理完成!")
break
elif data["status"] == "failed":
print(f"❌ 处理失败: {data['error']}")
break# PDF转Word文档
requests.post(f"http://localhost:8000/api/pdf/process/{task_id}?operation=pdf_to_docx")
# PDF拆分为单页
requests.post(f"http://localhost:8000/api/pdf/process/{task_id}?operation=split_pdf")
# 图片转PDF
requests.post(f"http://localhost:8000/api/pdf/process/{task_id}?operation=images_to_pdf")
# 获取所有任务历史
tasks_resp = requests.get("http://localhost:8000/api/tasks")
print("任务历史:", json.dumps(tasks_resp.json(), indent=2))version: '3.8'
services:
pdf-platform:
build: .
ports:
- "8000:8000"
volumes:
- ./models:/app/models
- ./data:/app/data
environment:
- PYTHONUNBUFFERED=1
restart: unless-stoppedapiVersion: apps/v1
kind: Deployment
metadata:
name: pdf-platform
spec:
replicas: 3
selector:
matchLabels:
app: pdf-platform
template:
metadata:
labels:
app: pdf-platform
spec:
containers:
- name: pdf-platform
image: pdf-platform:latest
ports:
- containerPort: 8000
resources:
requests:
memory: "2Gi"
cpu: "1000m"
limits:
memory: "8Gi"
cpu: "2000m"| 平台 | 部署方式 | 链接 |
|---|---|---|
| 腾讯云 | CloudStudio | 一键部署 |
| 阿里云 | 容器服务 | ACK部署 |
| AWS | ECS/EC2 | 快速启动 |
| Azure | App Service | 容器应用 |
- 首次启动:自动下载DeepSeek-OCR模型(约6GB)
- 模型缓存:存储在
models/目录 - 离线使用:下载后支持完全离线运行
- 临时文件:
temp_uploads/和temp_outputs/ - 自动清理:
- 24小时后自动删除过期文件
- 每6小时执行一次定期清理
- 删除任务时同步清理相关文件
- 可通过API手动触发清理:
POST /api/cleanup - 可通过API清空所有临时文件:
POST /api/cleanup/all - 前端提供"清空所有临时文件"按钮,一键清理所有文件和任务历史
- 持久化:重要结果请及时下载保存
- 内存要求:建议8GB+内存处理大文件
- 并发限制:默认支持10个并发任务
- 文件大小:单文件建议不超过100MB
{
"task_id": "uuid-string",
"status": "completed",
"progress": 100,
"results": [
{
"success": true,
"output_file": "/path/to/output.pdf",
"message": "✓ 处理完成"
}
],
"created_at": "2024-01-01T00:00:00",
"completed_at": "2024-01-01T00:05:00"
}{
"detail": "错误信息",
"status": "failed",
"error": "具体错误原因"
}欢迎提交Issue和Pull Request!
# 克隆项目
git clone <repository-url>
cd pdf-platform
# 安装开发依赖
pip install -r requirements.txt
pip install -r requirements-dev.txt
# 运行测试
python test_pdf_processor.py
# 启动开发服务器
python start_server.py --reload本项目采用 MIT 许可证 - 详见 LICENSE 文件
⭐ 如果这个项目对你有帮助,请给个Star支持一下!
Made with ❤️ by [Your Team]
当前模板包含最简单的Hello World以及运行指令的Python示例代码仓库
点击运行按钮会自动运行,是因为有 .vscode/preview.yml 文件存在。
该文件的格式说明如下:
# .vscode/preview.yml
autoOpen: false
apps:
- port: 5000
run: 'pip install -i https://mirrors.tencent.com/pypi/simple/ -r ./requirements.txt && python ./app.py'
root: ./web
name: Python Cloud Studio Demo
description: Python Cloud Studio Demo Project
autoOpen: true
扫码加入 Cloud Studio 用户反馈群,获取实时技术支持:
- 腾讯云工程师群内答疑,解决环境与训练问题;
- 优先体验产品上新功能,获取专属活动通知;
- 与其他开发者交流 LoRA 训练经验与技巧。
