PDFMathTranslate 网页部署实战:从本机到团队公网访问
【免费下载链接】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
PDFMathTranslate 用 AI 对 PDF 论文做双语翻译并保留公式排版。本文讲 PDFMathTranslate 网页部署:本机跑通界面、局域网共享、账号限制、反向代理加 HTTPS 公网访问。不含模型调优与集群部署。
选部署方式:Python、Docker 还是 Windows 绿色版
三种安装路径最终启动的都是同一个 Gradio 网页服务,差别只在环境管理方式:
| 你的情况 | 选哪种 | 一句话差异 |
|---|---|---|
| 服务器长期给团队跑 | Docker | 依赖打进一个镜像,Dockerfile 里已包含 LibreOffice 等系统库 |
| 自己机器上做开发测试 | Python 直装 | 改代码即时生效,但要自己维护 Python 3.10 以上环境 |
| Windows 个人使用 | 绿色版压缩包 | 解压即运行,不装任何东西 |
服务器场景建议从源码构建:仓库里的 script/Dockerfile.China 针对国内网络调整了依赖源,构建慢时可以换它。
把 PDFMathTranslate 跑起来并完成首次翻译
以团队最常用的 Docker 路径为例:
git clone https://gitcode.com/GitHub_Trending/pd/PDFMathTranslate.git cd PDFMathTranslate docker compose up -d --build这条命令按 docker-compose.yml 构建镜像并后台启动容器,端口 7860 已映射到宿主机。想换端口只需修改 compose 文件里的ports行。
验证服务是否就绪:
curl -I http://127.0.0.1:7860看到HTTP/1.1 200即说明服务在监听。浏览器打开http://localhost:7860,Gradio 页面会自动弹出(启动逻辑在 pdf2zh/gui.py 中)。
Python 直装路径只有两步:
pip install pdf2zh pdf2zh -i-i即启动图形界面,默认监听 7860 端口。端口被占用时加--serverport 7861换一个。
Windows 绿色版从项目 Releases 页下载pdf2zh-version-win64.zip,解压后双击pdf2zh.exe,浏览器会自动打开本地服务;启动失败一般补装 VC++ 运行库即可。
界面上传一篇论文,选择源语言、目标语言和翻译服务,点击开始翻译,等待输出文件出现即为完成。下面的预览动画展示了翻译过程与双语版面的对应关系:
一行命令开放局域网访问 🔌
先说结论:通常不需要额外参数。setup_gui会依次尝试绑定::、0.0.0.0、127.0.0.1,绑到0.0.0.0即对局域网开放;Docker 路径下 compose 已映射 7860 端口。团队成员直接用http://服务器IP:7860访问。
在任一台办公电脑上验证连通性:
curl -I http://服务器IP:7860同样返回 200 即通。这一层的风险是服务完全无鉴权,局域网内任何人都能调用翻译、消耗你的 API 额度,上传内容也只有服务端口一个访问控制点,适合先小范围试用。
加账号密码,避免服务被滥用
给服务加上登录门禁,格式为每行一个用户、逗号分隔:
printf 'alice,pw-alice\nbob,pw-bob\n' > users.txt pdf2zh -i --authorized users.txt--authorized第一个参数是用户文件,可选第二个参数传入自定义登录页 HTML(解析逻辑见 pdf2zh/gui.py 的parse_user_passwd)。Docker 部署时把users.txt挂进容器并修改 compose 的command即可。注意密码在文件中和 HTTP 传输中都是明文,这一层只解决"谁来用",不解决"怎么传得安全",公网场景必须再叠一层 HTTPS。
反向代理加 HTTPS 的公网访问配置
用 Nginx 终结 TLS,把流量转给本机 7860:
server { listen 443 ssl; server_name translate.example.com; ssl_certificate /etc/nginx/cert.pem; ssl_certificate_key /etc/nginx/key.pem; client_max_body_size 200m; location / { proxy_pass http://127.0.0.1:7860; } }server_name与证书路径按实际域名替换,client_max_body_size决定能上传多大的 PDF。防火墙只放行 80/443,不再暴露 7860:
ufw allow 443/tcp公网开放意味着服务对互联网全量可见,账号密码(见上一节)与 HTTPS 两项缺一不可;对敏感团队还可以再加 IP 白名单。
长期稳定运行:可选调整清单
以下都不是必做项,按实际遇到的问题取用,完整说明见 docs/ADVANCED.md:
| 调整项 | 做法 | 何时用 |
|---|---|---|
| 换翻译引擎 | 页面下拉框直接切换;或启动时-s deepl并提前export DEEPL_AUTH_KEY=... | 默认 Google 服务不稳定或想换供应商 |
| 调并发 | -t 8(默认 4) | 大文档翻译排队久 |
| 自定义提示词 | --prompt prompt.txt | 团队术语、语气需要统一 |
| 跳过字体子集化 | --skip-subset-fonts | 个别 PDF 输出字体渲染异常 |
| 健康检查 | cron 里执行curl -sf http://127.0.0.1:7860/ || docker restart pdf2zh | 无人值守长期运行 |
配合docker stats观察容器 CPU 与内存占用,翻译高峰时若资源紧张,优先降-t而不是加机器。
出问题如何自查:先跑一遍可用性检查 ⚠️
先做一轮基础检查,排除"服务本身挂了"这类最常见情况:
docker ps # 容器是否还在运行 curl -I http://127.0.0.1:7860 # 端口是否响应 docker logs --tail 50 pdf2zh # 最近的报错 df -h . # 磁盘是否写满再对照症状定位:
| 症状 | 常见原因 | 处理 |
|---|---|---|
| 本机通、局域网不通 | 防火墙未放行 7860 | ufw allow 7860/tcp,并确认进程监听的是 0.0.0.0 而非 127.0.0.1 |
| 公网页面能开,点翻译没反应 | Gradio 依赖 WebSocket,Nginx 未透传升级头 | 在location内补proxy_set_header Upgrade $connection_upgrade等两行 |
| 上传大 PDF 报 413 | client_max_body_size过小 | 调大该值后nginx -s reload |
| 翻译报网络错误或超时 | 所选翻译服务网络不稳或额度耗尽 | 换一个服务重试;重复内容可依赖内置缓存避免重复请求 |
--share临时链接突然失效 | Gradio 分享链接有效期约 72 小时 | 团队场景固定使用端口或反向代理,不依赖 share 链接 |
收尾:把服务接进团队工作流
服务跑稳后,下一步建议给每个成员发放独立账号(--authorized),并把"提交 PDF → 取回译文"固化进团队的文献处理流程。若后续需要程序化批量翻译或对接其他工具,参考 docs/APIS.md 的接口说明即可在现有部署上直接扩展。
【免费下载链接】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),仅供参考