# hello-tool-server **Repository Path**: dkbnull/hello-tool-server ## Basic Information - **Project Name**: hello-tool-server - **Description**: 一个工具类服务,提供 PDF 转 Word、PDF 表格/文字转 Excel、PDF 扫描件 OCR 转 Word 等功能。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-17 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Hello Tool Server

一个基于 FastAPI 的工具类服务,提供 PDF 转 Word、PDF 表格/文字转 Excel、PDF 扫描件 OCR 转 Word 等功能。 ## 功能特性 - PDF 转 Word(完整保留格式) - PDF 表格转 Excel(结构化表格提取) - PDF 纯文字转 Excel(文本内容提取) - PDF 扫描件转 Word(OCR 识别图片文字) - 健康检查接口 - IP 访问控制(白名单/黑名单) - CSRF 防护 - 多层限流保护 - 定时清理过期文件 ## API 文档 服务启动后访问: - **Swagger UI**: http://localhost:8000/docs - **ReDoc**: http://localhost:8000/redoc ### 使用示例 ```bash # 1. 获取 CSRF Token(首次访问自动设置 cookie) curl -c cookies.txt http://localhost:8000/ # 2. 提取 CSRF Token CSRF_TOKEN=$(grep csrf_token cookies.txt | awk '{print $7}') # 3. 上传文件转换(PDF 转 Word) curl -X POST http://localhost:8000/convert/pdf-to-word \ -b cookies.txt \ -H "X-CSRF-Token: $CSRF_TOKEN" \ -F "file=@example.pdf" # 4. 上传文件转换(PDF 扫描件转 Word) curl -X POST http://localhost:8000/convert/pdf-scan-to-word \ -b cookies.txt \ -H "X-CSRF-Token: $CSRF_TOKEN" \ -F "file=@scan.pdf" # 5. 下载转换结果 curl -O http://localhost:8000/convert/download/ ``` ## 项目结构 ``` hello-tool-server/ ├── app/ │ ├── api/ # API 路由层 │ │ ├── auth.py # 认证相关接口 │ │ └── convert.py # 文件转换接口 │ ├── core/ # 核心业务层 │ │ ├── config.py # 集中配置管理 │ │ ├── exceptions.py # 自定义异常体系 │ │ ├── pdf2docx.py # PDF 转 Word 实现 │ │ ├── pdf2excel.py # PDF 转 Excel 实现 │ │ └── pdf_scan2docx.py # PDF 扫描件转 Word(OCR)实现 │ ├── schemas/ # 数据模型层 │ │ ├── auth.py # 认证相关模型 │ │ └── convert.py # 转换相关模型 │ ├── services/ # 业务服务层 │ │ ├── auth_service.py # 认证服务 │ │ └── convert_service.py # 文件转换服务 │ ├── utils/ # 工具层 │ │ ├── api_utils.py # API 通用处理函数 │ │ ├── file_utils.py # 文件操作工具 │ │ ├── limiter.py # 限流配置 │ │ ├── logger.py # 日志配置 │ │ ├── request.py # 请求工具函数 │ │ ├── scheduler.py # 定时任务调度 │ │ └── security.py # 安全中间件 │ └── main.py # 应用入口 └── requirements.txt # Python 依赖 ``` ## 配置说明 所有配置均通过环境变量管理,支持 `.env` 文件。配置集中定义在 `app/core/config.py` 中。 ### 基础配置 | 环境变量 | 默认值 | 说明 | |----------------------------|------------|----------------------| | `MAX_FILE_SIZE` | `10485760` | 上传文件大小上限(字节),默认 10MB | | `FILE_EXPIRY_MINUTES` | `10` | 临时文件过期时间(分钟) | | `CLEANUP_INTERVAL_MINUTES` | `5` | 定时清理间隔(分钟) | ### 安全配置 | 环境变量 | 默认值 | 说明 | |---------------------|--------|---------------------------------| | `ALLOWED_IPS` | (空) | IP 白名单,逗号分隔,为空则不限制 | | `BLOCKED_IPS` | (空) | IP 黑名单,逗号分隔 | | `RATE_LIMIT_PER_IP` | `5` | 每个 IP 在时间窗口内的最大请求数 | | `RATE_LIMIT_WINDOW` | `1` | 速率限制时间窗口(秒) | | `CSRF_TOKEN_EXPIRY` | `3600` | CSRF Token 过期时间(秒) | | `SECURE_COOKIE` | `True` | 是否启用 Secure Cookie(生产环境应为 True) | ### CORS 配置 | 环境变量 | 默认值 | 说明 | |--------------------------|--------|------------------| | `CORS_ORIGINS` | `*` | 允许的来源,逗号分隔 | | `CORS_ALLOW_CREDENTIALS` | `True` | 是否允许携带凭证 | | `CORS_ALLOW_METHODS` | `*` | 允许的 HTTP 方法,逗号分隔 | | `CORS_ALLOW_HEADERS` | `*` | 允许的请求头,逗号分隔 | ## 安全机制 - **IP 访问控制**:支持白名单和黑名单 - **速率限制**:中间件级 + 路由级双重限流 - **CSRF 防护**:基于 Token 的跨站请求伪造防护 - **请求头校验**:检查 User-Agent 和 Content-Type - **安全 Cookie**:HttpOnly + Secure + SameSite ## 技术栈 | 类别 | 技术 | |--------|---------------------------------------| | Web 框架 | FastAPI + Uvicorn | | PDF 处理 | pdf2docx、tabula-py、pdfplumber、PyMuPDF | | OCR 识别 | RapidOCR (rapidocr-onnxruntime) | | Excel | openpyxl | | Word | python-docx | | 限流 | slowapi | | 定时任务 | APScheduler | | 配置管理 | pydantic-settings | ## 注意事项 - 本服务仅用于测试和学习目的,生产环境使用请自行评估风险 - 文件上传后会在配置的过期时间后自动清理 - 下载后的文件会立即从服务器删除 - PDF 扫描件转 Word 使用 OCR 技术,识别精度取决于扫描件质量 - 建议在生产环境启用 HTTPS 和 Secure Cookie ## 许可证 Apache License 2.0 ---