一个带图形界面的 Windows / macOS / Linux 桌面工具,两大能力:
- 图书翻译 — 把 EPUB 翻译成中文(或其它语言),支持 纯译文 / 双语对照,输出格式可多选 EPUB / DOCX / PDF;保留原书章节结构、目录、样式、图片。
- 格式转换 — EPUB / DOCX / PDF 三者间互转,共 6 条路径。
⚠️ 合规声明:本工具是通用转换/翻译工具,请仅用于你拥有合法授权或属于公有领域的作品。对违规使用造成的任何后果,作者与本工具不承担责任。
| 能力 | 说明 |
|---|---|
| 双翻译引擎 | google(免费、免 Key) / openai(含 DeepSeek、硅基流动、Azure、Ollama 等 OpenAI 协议后端) |
| 翻译模式 | 纯译文 / 双语对照(段落交错:原文 + 译文) 单选 |
| 输出格式 | EPUB / DOCX / PDF 多选,默认 EPUB;EPUB 保留原书章节/目录/样式/图片/表格 |
| 并发翻译 | 线程池并发,GUI 内可调 1 |
| 断点续传 | 每段即写磁盘缓存 + 每本书每引擎独立缓存文件;关程序后重启自动从断点继续 |
| 暂停 / 停止 | 任意时刻可暂停(段间挂起,随时继续) / 停止(已翻译段落落盘不丢失) |
| 自定义提示词 | GUI 内多行文本框配置 system prompt(仅对 OpenAI 引擎生效),默认内置中文翻译家人设 |
| 图片处理 | 按内容哈希去重提取,EPUB 原位保留、DOCX 顺位嵌入 |
| 表格支持 | EPUB 原位翻译单元格;DOCX 以 Light Grid Accent 1 样式还原 |
| 源 → 目标 | 实现 |
|---|---|
| epub → docx | 自建解析 + python-docx 重排(保留图片、表格) |
| epub → pdf | 经 DOCX 中间产物 |
| docx → pdf | docx2pdf(MS Word) 优先 → 降级 LibreOffice |
| pdf → docx | pdf2docx |
| docx → epub / pdf → epub | pandoc |
| 输出路径 | 默认 = 源文件同目录,切换目标格式自动更新 |
| 过程反馈 | 滚动进度条 + 状态文字;同路径覆盖保护 |
transforbook/
├── app.py # GUI 入口(Tkinter)
├── pipeline.py # 翻译流水线编排
├── epub_processor.py # EPUB 解析 + 图片/表格提取
├── epub_writer.py # EPUB 原位重写(保留结构、TOC uid 兜底)
├── translator.py # 翻译引擎 + 并发 + 暂停/停止 + 缓存
├── converter.py # 格式互转 + DOCX 生成
├── generate_sample_epub.py# 生成测试用小样本 EPUB
├── requirements.txt
├── README.md
├── source/ # 放源文件(不上传 git)
├── target/ # 输出目录(不上传 git)
└── .cache/ # 翻译缓存(不上传 git)
# Windows PowerShell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt# macOS / Linux
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
requirements.txt的注释必须是英文;中文注释在 Windows 默认 GBK 终端下会让pip install -r报UnicodeDecodeError。
| 功能 | 组件 | 安装 |
|---|---|---|
| DOCX → PDF(首选,保真最高) | MS Word | 已有即可 |
| DOCX → PDF(跨平台降级) | LibreOffice | https://www.libreoffice.org/ |
| DOCX ↔ EPUB | Pandoc | https://pandoc.org/installing.html |
python app.py| 字段 | 说明 |
|---|---|
| EPUB 源文件 | 待翻译的 .epub 路径 |
| 输出目录 | 默认 target/ |
| 图片目录 | 默认 target/images/,用于 DOCX 输出 |
| 引擎 | google / openai |
| 目标语言 | 默认 Simplified Chinese |
| Model / Base URL / API Key | 仅 OpenAI 引擎使用;Google 引擎可留空 |
| 并发数 | 1~32,默认 6 |
| 系统提示词 | 多行文本框;仅 OpenAI 生效,Google 引擎忽略 |
| 翻译模式 | 纯译文 / 双语对照 |
| 输出格式 | EPUB / DOCX / PDF 多选 |
| 按钮 | 开始翻译 · 暂停/继续 · 停止 · 打开输出目录 |
缓存文件命名:.cache/{书名}__{engine}.json,每段翻译即写磁盘,断电/强杀/手动停止后下次开跑自动续传。
- 选源文件 → 选目标格式 → 输出路径自动填为源目录下同名文件
- 点「开始转换」 → 进度条滚动动画直至完成
- 覆盖保护:输出路径与源相同时拒绝执行
from translator import build_engine, TranslatorService, TranslationCache
from pipeline import run_translation
engine = build_engine(
engine_name="google",
target_lang="Simplified Chinese",
# OpenAI 示例:
# engine_name="openai", api_key="sk-...",
# model="deepseek-chat", base_url="https://api.deepseek.com/v1",
# system_prompt="你现在是一位资深翻译家 ...",
)
service = TranslatorService(
engine,
cache=TranslationCache(".cache/book__google.json"),
concurrency=6,
)
produced = run_translation(
epub_path="source/book.epub",
output_dir="target",
image_dir="target/images",
translator=service,
mode="pure", # "pure" | "bilingual"
output_formats=("epub", "docx"), # 任意组合
progress_cb=lambda done, total, msg: print(f"[{done}/{total}] {msg}"),
)
print(produced)纯格式转换:
from converter import convert
convert("source/foo.epub", "target/foo.docx")
convert("source/foo.docx", "target/foo.pdf")
convert("source/foo.pdf", "target/foo.docx")- 两条 EPUB 处理路径:
EpubRewriter(原位重写、输出 EPUB 时用,保留所有结构)+EpubParser(结构化解析、输出 DOCX/PDF 时用)。 - 翻译并集去重:两条路径提取的文本取并集,一次翻译、多端回填,避免重复消耗。
- 并发 + 暂停/停止:
ThreadPoolExecutor做并发,threading.Event控制暂停与停止;停止不丢已翻段落。 - 缓存即写:
TranslationCache加锁 + 每次set()立即fsync-safe落盘,上限容灾。 - TOC uid 兜底:部分 EPUB3(如纯 nav 结构)被 ebooklib 读入后 TOC 节点
uid=None,写出 NCX 时 lxml 会崩。EpubRewriter.save在保存前统一补齐。 - 降级链:DOCX→PDF 优先
docx2pdf(Word)→ 降级 LibreOffice;EPUB→PDF 走EPUB→DOCX→PDF,避免 LaTeX 依赖。
Q: Google 引擎报错或频繁失败?
A: deep-translator 解析网页端接口,国内需要能访问 translate.google.com;高并发可能触发 429,把"并发数"调到 4 以下再试。失败的段落会以 [翻译失败] … 形式落盘,二次运行凭缓存跳过成功段。
Q: 想用本地 Ollama?
A: 引擎选 openai,Base URL 填 http://127.0.0.1:11434/v1,Model 填 qwen2.5:7b 之类,API Key 随便填一个非空字符串即可。
Q: 翻译太慢?
A:(1)提高并发数(Google 2~8,LLM 看配额);(2)二次翻译同一本书凭缓存可秒回;(3)OpenAI 引擎可改更快模型如 gpt-4o-mini / deepseek-chat。
Q: PDF 转出来乱?
A: PDF 版式信息天生有损,复杂排版建议优先以 EPUB/DOCX 作为中间格式。
Q: 生成一个小测试 EPUB 来跑通流程?
A: python generate_sample_epub.py 会在 source/sample_test.epub 生成一个包含标题/段落/列表/表格/引用/代码/图片的单章样本(~14KB)。
见 打包指南 与 GitHub 提交指南(README 下方延伸章节或项目 Wiki)。
本项目基于 Apache License 2.0 开源,版权所有 © 2026 Adouer。
- 你可以:自由使用、修改、商用、再分发(含闭源商用)
- 你必须:保留
LICENSE/NOTICE文件、修改处显式标注、保留原版权与专利授权声明 - 第三方依赖组件的归属见 NOTICE
使用者须自行保证被翻译/转换对象的版权合规(例如:仅处理公有领域作品或拥有合法授权的私人资料)。