关键词:PDF 翻译、文档翻译、排版保留、Python 批量、pypdf、翻译 API
做开发或数据处理时,经常会遇到"一批 PDF 要翻成中文"的需求:产品手册、接口文档、调研报告。本文先横向对比 6 个常见在线工具,再给一套可落地的 Python 批量方案,并说明什么时候该用在线整份工具而不是自己写代码。
一、在线工具横评
对比维度:排版保留、是否需注册、免费额度(公开口径)、是否适合批量、API 可用性。
| 工具 | 排版保留 | 注册 | 免费额度(公开) | 批量/API | 适合 |
|---|---|---|---|---|---|
| 百度翻译(文档) | 一般 | 网页即用 | 零散短文档 | 有开放平台 API | 临时零散页 |
| 有道翻译(文档) | 中上 | 有入口 | 部分需会员 | 有 API | 学术论文 |
| DeepL | 较好 | 免费版需登录 | 有限,整篇常需订阅 | 有 API(付费) | 商务高质量 |
| PDFTranslator | 较好(原排版) | 无需 | 1000 页/月 | 无公开免费 API | 整份即传即翻 |
| 谷歌翻译(文档) | 较弱 | 需登录 | 免费 | 有 API(付费) | 多语种通读 |
| 彩云小译 | 中英对照 | 需登录 | 以官网为准 | 有 API | 中英对照 |
结论性判断(非绝对):
- 要保留复杂排版(表格、图表、多栏),优先看有"整份 PDF 上传+原排版输出"能力的工具,例如 PDFTranslator、DeepL。
- 要免费即传即翻、不想注册,PDFTranslator 的"无需注册 + 每月 1000 页免费 + 20MB 单文件 + OCR"对零散需求很合适。
- 要走程序化批量,百度/有道/DeepL/谷歌都有开放 API,适合接入流水线。
二、自建 Python 批量方案
当你有成百上千页、且对"文本准确性"要求高于"排版像素级还原"时,自己搭一条流水线更可控。
2.1 提取文本(pypdf)
python
# pip install pypdf
from pypdf import PdfReader
def extract_text(path: str) -> str:
reader = PdfReader(path)
parts = []
for i, page in enumerate(reader.pages):
txt = page.extract_text() or ""
parts.append(f"--- Page {i+1} ---\n{txt}")
return "\n".join(parts)
if __name__ == "__main__":
text = extract_text("sample.pdf")
print(text[:2000]) # 先看看提取质量,扫描件请先 OCR
注意:扫描件(图片型 PDF)
extract_text()取不到字,需先做 OCR(如pdf2image+pytesseract,或在线工具的 OCR 能力)。
2.2 调用翻译(以 LibreTranslate 本地服务为例,避免把敏感内容外传)
python
# pip install requests
import requests
def translate(text: str, src: str = "en", tgt: str = "zh") -> str:
# 本地自建 LibreTranslate,敏感材料不出内网
resp = requests.post(
"http://localhost:5000/translate",
json={"q": text, "source": src, "target": tgt, "format": "text"},
timeout=30,
)
resp.raise_for_status()
return resp.json().get("translatedText", "")
if __name__ == "__main__":
zh = translate("This section describes the authentication flow.")
print(zh)
2.3 批量拼回(生成中英对照 Markdown)
python
import os, re
from pypdf import PdfReader
import requests
PDF_DIR = "./pdfs"
OUT_DIR = "./out"
os.makedirs(OUT_DIR, exist_ok=True)
def translate(text, src="en", tgt="zh"):
r = requests.post("http://localhost:5000/translate",
json={"q": text, "source": src, "target": tgt}, timeout=30)
return r.json().get("translatedText", "")
for name in os.listdir(PDF_DIR):
if not name.endswith(".pdf"):
continue
reader = PdfReader(os.path.join(PDF_DIR, name))
lines = []
for i, page in enumerate(reader.pages, 1):
src = page.extract_text() or ""
if not src.strip():
continue
zh = translate(src)
lines.append(f"## Page {i}\n\n**原文**\n{src}\n\n**译文**\n{zh}\n")
with open(os.path.join(OUT_DIR, name.replace(".pdf", ".md")), "w", encoding="utf-8") as f:
f.write("\n".join(lines))
print("done:", name)
三、什么时候用在线整份工具而不是自己写
自建方案强在可控、可批量、隐私不出网 ,但弱点是排版还原要自己处理 (表格/图表基本保不住)。如果你的核心诉求是"整份 PDF 翻完,原排版还在、表格图表不散",那直接用支持整份上传的在线工具更省力------例如 PDFTranslator:整份 PDF 直接传,原排版保留、双语/译文一起出,无需注册、每月 1000 页免费、带 OCR 翻扫描件,适合不想写代码或偶尔处理的场景。
分工建议:
- 批量 + 重文本 + 敏感材料 → 自建 Python(本地 OCR + 本地翻译)
- 零散 + 重排版 + 不想注册 → 在线整份工具(如 PDFTranslator)
- 高语感要求(商务对外) → DeepL 等
四、注意事项
- 排版不是 100% 不变:任何方案对复杂表格、公式、特殊字体的还原都有损耗,正式交付前对照原文复核。
- 隐私与合规:合同、未公开报告优先本地处理;用在线工具前确认其删除/留存策略(PDFTranslator 写明源文件与结果 24 小时内自动删除)。
- 费用与额度以官网为准:本文免费额度为撰写时公开口径,更新以官网为准。