从 3 行 Python 到常驻 HTTP 服务:PDFMathTranslate 批量翻译 API 实战指南
【免费下载链接】PDFMathTranslate[EMNLP 2025 Demo] PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/MCP/Docker/Zotero项目地址: https://gitcode.com/GitHub_Trending/pd/PDFMathTranslate
需要把几十篇带公式的英文论文一次性翻译成中文、且排版不能散架时,逐份跑 CLI 显然不现实。本文基于 PDFMathTranslate(pip 包名pdf2zh)给出 PDF 批量翻译 API 的两条落地路线:进程内 Python 调用,以及 Flask+Celery 常驻 HTTP 翻译服务,覆盖提交任务、轮询进度、取回结果、取消任务四个动作。
两条路线选型:进程内 Python vs 常驻 HTTP
| 维度 | 进程内 Python 调用 | 常驻 HTTP 服务 |
|---|---|---|
| 形态 | from pdf2zh import translate | 对/v1/translate发 POST/GET/DELETE |
| 适用场景 | 脚本、CI、单机批量转目录 | 多客户端共享、远程提交、进度追踪 |
| 额外依赖 | 无,装 pdf2zh 即可 | pdf2zh[backend]+ Redis |
| 进度反馈 | 传callback接收 tqdm 进度对象 | 轮询任务状态PROGRESS→SUCCESS |
| 结果落地 | 直接写本地文件 | 通过 HTTP 拉取 mono/dual 两个 PDF |
一句话决策:个人或课题组做批处理,走进程内;多个系统、多人要共用一份翻译能力,走常驻 HTTP。
路线一:3 行代码用 translate() 完成批量 PDF 翻译
先装环境(Python 要求>=3.11,<3.13):
pip install pdf2zh最小可运行调用如下:
from pdf2zh import translate params = dict(lang_in="en", lang_out="zh", service="google", thread=4) results = translate(files=["paper1.pdf", "paper2.pdf"], output="./out", **params) # [("paper1-mono.pdf", "paper1-dual.pdf"), ("paper2-mono.pdf", "paper2-dual.pdf")]几个实操要点:
- 每个输入产出两份 PDF:
mono为纯译文版,dual为保留原版排版的译文对照版,公式、表格位置与原稿一致。 files列表里可以直接放http(s)://链接,库会自动下载;.doc/.docx文件会被先转成 PDF 再翻译。- 想在进程里上报进度,传
callback即可,它接收每页处理完的 tqdm 对象。 - 不想写代码时,CLI 的
pdf2zh --dir /path/to/translate/会递归扫描目录批量处理,适合一次性清库存。
如果 PDF 已经在内存里(从对象存储或数据库取回),改用translate_stream:
from pdf2zh import translate_stream with open("paper.pdf", "rb") as f: mono, dual = translate_stream(stream=f.read(), **params)mono/dual是 bytes,各开一个文件以二进制模式写入即可。
路线二:两条命令起 Flask+Celery HTTP 翻译服务
第一步装后端依赖并备好 Redis。Redis 是 Celery 异步翻译任务的 broker 兼结果存储,默认地址redis://127.0.0.1:6379/0,可用环境变量CELERY_BROKER、CELERY_RESULT改指向:
pip install pdf2zh[backend] sudo apt-get install redis-server # 已有 Redis 可跳过第二步开两个进程,Flask 接口固定监听 11008 端口:
pdf2zh --flask # HTTP API pdf2zh --celery worker # 异步任务 worker提交翻译任务拿任务 ID
curl http://127.0.0.1:11008/v1/translate \ -F "file=@paper1.pdf" \ -F 'data={"lang_in":"en","lang_out":"zh","service":"google","thread":4}' # {"id":"d9894125-2f4e-45ea-9d93-1a9068d2045a"}data就是与 Python 路线同构的参数 JSON,字段见下方速查表。批量提交就是循环发 N 次,收集 N 个 id。
轮询进度直到 SUCCESS
curl http://127.0.0.1:11008/v1/translate/d9894125-2f4e-45ea-9d93-1a9068d2045a # 进行中: {"info":{"n":13,"total":506},"state":"PROGRESS"} # 已完成: {"state":"SUCCESS"}info.n/info.total是已处理/总页数,前端直接当进度条用。轮询可以套一个while循环,每 5 秒取一次,state为SUCCESS就退出。
拉取单语、双语 PDF 结果
curl http://127.0.0.1:11008/v1/translate/$ID/mono --output paper1-mono.pdf curl http://127.0.0.1:11008/v1/translate/$ID/dual --output paper1-dual.pdf注意:任务未完成或失败时这两个端点直接返回 400({"error":"task not finished"}/{"error":"task failed"}),别把它当接口故障处理。
取消运行中的任务
curl http://127.0.0.1:11008/v1/translate/$ID -X DELETE # 任务被 revoke,state 变为 REVOKEDworker 进程会被直接终止(内部走revoke(terminate=True)),适合误提交或参数写错的场景。
批量翻译 API 接口与参数速查表
| 方法 | 路径 | 动作 | 返回 |
|---|---|---|---|
| POST | /v1/translate | 提交任务,表单字段file+data(JSON) | {"id": "..."} |
| GET | /v1/translate/{id} | 查状态 | PROGRESS时附带info{n,total},完成后为SUCCESS |
| GET | /v1/translate/{id}/mono | 取纯译文 PDF | application/pdf,未完成返回 400 |
| GET | /v1/translate/{id}/dual | 取双语对照 PDF | application/pdf,未完成返回 400 |
| DELETE | /v1/translate/{id} | 终止并删除任务 | {"state": "REVOKED"} |
data里可用的主要参数(HTTP 与 Python 路线通用):
| 参数 | 说明 | 示例 |
|---|---|---|
lang_in/lang_out | 源 / 目标语言代码 | en/zh |
service | 翻译后端,支持 google、deepl、openai、ollama 等 | google |
thread | 并行线程数 | 4 |
pages | 只译指定页(从 0 计数) | [0, 3, 4] |
prompt | 自定义提示词,后端按 Template 渲染 | 模板字符串 |
ignore_cache | 强制绕过翻译缓存重译 | true |
常见坑与进阶方向
- ⚠️ 别提前取结果:结果端点 400 不代表服务坏了,先 GET 确认
SUCCESS。 - HTTP 路线会把整个 PDF 以 bytes 塞进 Celery 任务,大文件会占用 broker 与 worker 内存;大批量巨型文件走进程内
translate()(逐文件读盘落盘)更省内存,或在服务侧控制并发。 - 翻译缓存是本地 sqlite(见 pdf2zh/cache.py):引擎与参数不变时,已译过的句子直接命中,同一批文档重跑几乎零成本;需要重译时用
ignore_cache。 - 接口的实现在 pdf2zh/backend.py,更细的文档见 docs/APIS.md;Python 入口封装在 pdf2zh/high_level.py。
- 进阶方向:
--mode precise切到 v2 翻译内核,--onnx指定自定义版面分析模型,pdf2zh --mcp以 MCP 协议接入大模型客户端。
研究场景的批量文献处理,进程内路线足够轻量;当多个客户端要共用一份翻译能力、需要远程提交与进度追踪时,再把 Flask+Celery 这套常驻服务拉起来。
【免费下载链接】PDFMathTranslate[EMNLP 2025 Demo] PDF scientific paper translation with preserved formats - 基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/MCP/Docker/Zotero项目地址: https://gitcode.com/GitHub_Trending/pd/PDFMathTranslate
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考