论文公式一翻就乱码?用 PDFMathTranslate 一条命令译出中英对照 PDF
【免费下载链接】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
把 PDF 里的英文段落粘进翻译器,公式多半变成乱码,双栏文字顺序错乱,图注和目录直接消失。PDFMathTranslate(Python 包名pdf2zh)就是为这个问题做的开源工具:它先识别页面中的公式、图表和正文区域,只翻译文本区,再把译文按原坐标写回,一条命令就能得到保留原始排版的纯译文 PDF 和中英对照双语 PDF。项目已被 EMNLP 2025 收录为系统演示论文,AGPL-3.0 协议开源。
PDF 版面分析:先切块再翻译,公式图表原样保留
普通方案是先把文本整体抠出来,PDFMathTranslate 走的是另一条路:内置 DocLayout-YOLO 的 ONNX 推理,把每一页切成正文、公式、图片、表格、页眉页脚等区域,只有文本区会被送去翻译,非文本区域整块保留,译文再按原坐标回填。多栏、跨页、公式编号这些最容易翻散的排版,因此在输出里原样不动。
每次翻译会产出两个文件:xxx-mono.pdf(纯译文)和xxx-dual.pdf(双语对照)。左为英文原页、右为译文页,公式与编号均停留在原位:
安装 pdf2zh 并翻译第一份 PDF:两条命令出结果
要求 Python 3.11~3.12(项目声明>=3.11,<3.13)。默认使用 Google 翻译服务,不需要配置任何密钥,所以这也是验证"装好了没有"的最短路径:
pip install pdf2zh pdf2zh paper.pdf完成后当前目录会多出paper-mono.pdf和paper-dual.pdf。首次运行会下载几十 MB 的版面检测模型,网络不畅时先设置HF_ENDPOINT=https://hf-mirror.com环境变量再运行即可。
除本地文件外,PDF 的 URL 也可以直接作为输入。常用参数不必死记,记住这张小表:
| 参数 | 用途 | 示例 |
|---|---|---|
-p | 只翻部分页 | pdf2zh paper.pdf -p 1-3,5 |
-li/-lo | 源语言 / 目标语言 | -li en -lo ja |
-s | 翻译服务,服务名:模型名可直指定模型 | -s openai:gpt-4o-mini |
-t | 多线程数,长文档适当加大 | -t 4 |
-f/-c | 用正则声明保持原样的字体或字符 | -f "(MS.*)" | -c "(\\+|=)" |
-f/-c默认已保护 Math、Mono、Italic 等数学与代码字体,一般不用动;完整参数见 docs/ADVANCED.md。
不想敲命令:pdf2zh -i 启动本地 Web 界面
运行pdf2zh -i后浏览器自动打开http://localhost:7860/,文件上传、服务选择、目标语言、页码范围全部点选完成,译完即可在线预览并下载两个 PDF。下面是同一篇 Nature 论文在界面中的翻译前与翻译后状态:
界面还留了两个给"部署成共享服务"用的开关:--share生成对外临时链接,--authorized users.txt用"用户名,密码"文件限制登录用户,详见 docs/README_GUI.md。
整目录批量翻译 PDF 与 Docker 部署共用翻译服务
文献整理场景下,pdf2zh --dir /path/to/papers/会遍历目录里的 PDF 逐一翻译。已翻译过的文本段默认写入缓存,重复处理同一文档不再消耗 API 额度,想强制重翻时加--ignore-cache。--config config.json可以预先把语言、密钥和多组服务写进配置文件(默认读~/.config/PDFMathTranslate/config.json),命令行参数仍可随时覆盖。
团队共用一台翻译服务时,用仓库里的 Dockerfile 或 docker-compose.yml 都可以,官方镜像两条命令起步:docker pull byaidu/pdf2zh,再docker run -d -p 7860:7860 byaidu/pdf2zh,然后访问http://localhost:7860/——与本机 GUI 是同一套界面。
把 PDF 翻译接进系统:Python API、HTTP 接口与 MCP
在 Python 脚本里直接调用只需要几行,返回值同样是纯译文与双语两个文件:
from pdf2zh import translate params = dict(lang_in="en", lang_out="zh", service="google", thread=4) file_mono, file_dual = translate(files=["example.pdf"], **params)[0]做成在线服务则是另一条路:安装pdf2zh[backend]后运行pdf2zh --flask与pdf2zh --celery worker(需要 Redis),即可通过 REST 接口提交任务、查询进度、下载结果,细节见 docs/APIS.md。第三种形态是给 AI 助手用的:pdf2zh --mcp(加--sse可走 SSE 传输)把翻译能力暴露给 Claude Desktop 等 MCP 客户端,用自然语言让它帮你找文件并翻译。如果你的 API 需要走自建中转,docs/PROXY_CONFIGURATION.md 有 Grok / OpenAI 兼容接口的完整示例,注意BASE_URL要带/v1后缀。
常见问题:扫描版能否翻译、如何切换翻译引擎
扫描版 / 图片型 PDF 能翻吗?不能直接翻。它识别的是 PDF 内嵌文本层,纯图片页面没有可翻译的文本,需要先做 OCR 再处理。带文本层的学术论文、技术报告、标准文档才是主战场。
换翻译引擎要配什么?-s后面跟服务名即可:Google、Bing 免费免配置;DeepL、OpenAI、Gemini、DeepSeek 等需要在环境变量或配置文件中提供 API Key,各服务对应的变量名对照表在 docs/ADVANCED.md。对术语质量要求高时,可用--prompt prompt.txt注入领域提示词,模板支持${lang_in}、${lang_out}、${text}三个变量。
个别阅读器打开输出乱码?默认会对字体做子集裁剪以减小体积,兼容性不佳时加--skip-subset-fonts关闭。
Windows 不想装 Python?发布页有pdf2zh.exe压缩包,解压双击运行;Zotero 用户则可以在文献管理软件里通过社区插件直接触发翻译。
哪些 PDF 不适合用 PDFMathTranslate
翻译质量完全取决于所选服务:默认 Google 免配置、够用但不精,术语密集的材料建议换 DeepL 或大模型服务并配合自定义提示词。--mode precise(v2 实验内核,需先运行pdf2zh-setup-precise搭建独立环境)和--babeldoc后端都还标注为实验特性,正式交付建议先用默认模式。环境上认准 Python 3.11~3.12,或用 Docker 与 Windows 免安装版绕开依赖问题。
【免费下载链接】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),仅供参考