从 3 行 Python 到常驻 HTTP 服务:PDFMathTranslate 批量翻译 API 实战指南
2026/9/1 10:57:12 网站建设 项目流程

从 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 进度对象轮询任务状态PROGRESSSUCCESS
结果落地直接写本地文件通过 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_BROKERCELERY_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 秒取一次,stateSUCCESS就退出。

拉取单语、双语 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 变为 REVOKED

worker 进程会被直接终止(内部走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取纯译文 PDFapplication/pdf,未完成返回 400
GET/v1/translate/{id}/dual取双语对照 PDFapplication/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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询