开源社区做保留排版的项目不少,但是都围绕可复制,可编辑的 PDF,以及行内公式不复杂的场景.
RetainPDF 从一开始就是要解决各类 PDF 的保留排版翻译问题,尤其是图片型/扫描版 PDF,以及行内公式的渲染问题.
在保留排版翻译这个领域,正面硬刚闭源模型,并且在一些场景下做得更好,比如翻译后的 PDF 体积、整体速度和字体大小控制。
此外本项目是前后端分离、OCR、翻译、排版与交付打通的全栈项目,整体结构尽量解耦,既能直接使用,也方便后续开发者继续扩展、替换模块和二次开发。
简单对比:
| 项目 | 扫描型 PDF | 复杂行内公式 | 代码不误翻 | 表格控制 | 自定义翻译策略 | 排版保留 | PDF 压缩优化 | API 自动化 |
|---|---|---|---|---|---|---|---|---|
| PDFMathTranslate | ❌ | ❌ | ❌ | 弱 | 弱 | 一般 | 一般 | ✅ |
| PolyglotPDF | ❌ | ❌ | ❌ | 弱 | 弱 | 一般 | 一般 | ✅ |
| Doc2X | ✅ | ✅ | ❌ | 中 | 弱 | 强 | 弱 | ❌ 不开放 |
| RetainPDF | ✅ | ✅ | ✅ | ✅ 可开关 | ✅ 可按规则配置 | 强 | ✅ 持续优化 | ✅ |
如果你只是想直接使用,先去 GitHub Releases 下载对应平台的发布包:
- Windows:优先下载
Setup.exe - macOS:下载
.dmg - Linux:下载
.deb
如果你想给局域网、团队或多台设备一起用,优先选 Docker 部署。
由于当前没有 Apple 开发者账号,macOS 版本第一次打开时可能会提示应用“已损坏”。这不是文件真的损坏,而是系统的签名校验导致的。把应用拖到 /Applications 后,执行:
sudo xattr -r -d com.apple.quarantine /Applications/RetainPDF.app然后再重新打开应用即可。
当前仓库提供了 Docker 交付目录:
基本步骤:
git clone https://github.com/wxyhgk/retain-pdf.git
cd retain-pdf/docker/delivery
docker compose up -d启动后默认访问:
http://127.0.0.1:40001
默认端口:
40001:前端页面41000:Rust API42000:简便同步接口
如果只是更新到最新镜像版本:
cd retain-pdf/docker/delivery
docker compose pull
docker compose up -d如果你要切换到指定镜像版本,也可以这样:
cd retain-pdf/docker/delivery
APP_IMAGE=wxyhgk/retainpdf-app:latest \
WEB_IMAGE=wxyhgk/retainpdf-web:latest \
docker compose up -d更新后建议执行一次状态检查:
docker compose ps当前镜像地址:
建议按下面顺序阅读。
- 当前 API 文档
- 文档目录
- 工程评价与后续执行计划
- 架构解耦任务台账
- Pipeline 阶段契约
- Rust API 任务生命周期
- 产物清单与下载
- 服务总览
- 本地启动与配置
- 接口说明
- 存储结构
- 错误排查
- 后端脚本说明
- 旧 FastAPI 包装层
frontend/:当前浏览器前端静态资源与桌面端打包输入目录
frontend/浏览器前端、桌面壳、预览实验页面。backend/Rust API、Python 脚本、嵌入式 Python、旧 FastAPI 包装层、历史工作区。docker/Dockerfile、发布脚本、交付用 compose 配置。data/本地运行输出、任务目录、历史样本数据。
RetainPDF 目前已经可以完成从 PDF 上传、OCR、翻译、排版重建到产物下载的完整链路。
接下来我的重点不是盲目堆功能,而是继续把下面几件事做稳:
- 工程一致性
- API 与产物契约稳定性
- 构建可复现性
- 长文块与公式场景下的翻译稳定性
如果你想了解我接下来准备怎么推进,可以看:
如果你也对下面这些方向感兴趣,欢迎一起把这个项目继续往前做:
- 高精度 OCR / 疑难版面解析
- 长文块与公式场景下的翻译稳定性
- 排版回填、字体自适应与 PDF 渲染
- 桌面端、Docker 交付与工程化完善
不管你更擅长算法、前端、后端还是部署,只要你也想把“真正能用的 PDF 保留排版翻译”这件事做深,欢迎进来一起搞。
This project is distributed under the MIT License. See LICENSE for the full text.







