Skip to content

Adouer/transforbook

Repository files navigation

TransforBook · 图书翻译与格式转换

一个带图形界面的 Windows / macOS / Linux 桌面工具,两大能力:

  1. 图书翻译 — 把 EPUB 翻译成中文(或其它语言),支持 纯译文 / 双语对照,输出格式可多选 EPUB / DOCX / PDF;保留原书章节结构、目录、样式、图片。
  2. 格式转换 — EPUB / DOCX / PDF 三者间互转,共 6 条路径。

⚠️ 合规声明:本工具是通用转换/翻译工具,请用于你拥有合法授权属于公有领域的作品。对违规使用造成的任何后果,作者与本工具不承担责任。


✨ 功能一览

图书翻译

能力 说明
双翻译引擎 google(免费、免 Key) / openai(含 DeepSeek、硅基流动、Azure、Ollama 等 OpenAI 协议后端)
翻译模式 纯译文 / 双语对照(段落交错:原文 + 译文) 单选
输出格式 EPUB / DOCX / PDF 多选,默认 EPUB;EPUB 保留原书章节/目录/样式/图片/表格
并发翻译 线程池并发,GUI 内可调 132(Google 建议 48,LLM 看配额)
断点续传 每段即写磁盘缓存 + 每本书每引擎独立缓存文件;关程序后重启自动从断点继续
暂停 / 停止 任意时刻可暂停(段间挂起,随时继续) / 停止(已翻译段落落盘不丢失)
自定义提示词 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)

🚀 快速开始

1. 环境准备

# 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 -rUnicodeDecodeError

2. 可选系统组件(按需安装)

功能 组件 安装
DOCX → PDF(首选,保真最高) MS Word 已有即可
DOCX → PDF(跨平台降级) LibreOffice https://www.libreoffice.org/
DOCX ↔ EPUB Pandoc https://pandoc.org/installing.html

3. 启动

python app.py

🧭 GUI 使用

Tab 1 · 图书翻译

字段 说明
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每段翻译即写磁盘,断电/强杀/手动停止后下次开跑自动续传。

Tab 2 · 格式转换

  • 选源文件 → 选目标格式 → 输出路径自动填为源目录下同名文件
  • 点「开始转换」 → 进度条滚动动画直至完成
  • 覆盖保护:输出路径与源相同时拒绝执行

🧩 脚本式使用

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: 引擎选 openaiBase URLhttp://127.0.0.1:11434/v1Modelqwen2.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)。


🧾 License

本项目基于 Apache License 2.0 开源,版权所有 © 2026 Adouer。

  • 可以:自由使用、修改、商用、再分发(含闭源商用)
  • 必须:保留 LICENSE / NOTICE 文件、修改处显式标注、保留原版权与专利授权声明
  • 第三方依赖组件的归属见 NOTICE

使用者须自行保证被翻译/转换对象的版权合规(例如:仅处理公有领域作品或拥有合法授权的私人资料)。

About

TransforBook · 图书翻译与格式转换 一个带图形界面的 Windows / macOS / Linux 桌面工具,两大能力: 图书翻译 — 把 EPUB 翻译成中文(或其它语言),支持 纯译文 / 双语对照,输出格式可多选 EPUB / DOCX / PDF;保留原书章节结构、目录、样式、图片。 格式转换 — EPUB / DOCX / PDF 三者间互转,共 6 条路径。

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages