PDF2EPUB 使用手册 | English
PDF2EPUB 是一个强大的工具,可以将 PDF 书籍转换为 EPUB 格式,并可以将 EPUB 书籍从一种语言翻译成另一种语言。该工具利用 Google Gemini API 进行 PDF 解析和翻译,并使用 S3 兼容存储来保存和同步文件。
由于中国大陆无法直接访问 Google Gemini API,强烈建议使用 GitHub Actions 进行自动化处理。
-
Fork 本仓库到你的 GitHub 账户
-
转到分叉仓库的
Setting选项卡 -
转到
Secrets and variables - Actions选项卡 -
添加一个名为
CONFIG的新密钥,内容为你的完整config.yaml文件内容(参考下方配置说明) -
在 GitHub 仓库页面,转到 Actions 选项卡
-
选择要运行的工作流:
Convert pdf to epub- 将 PDF 转换为 EPUBTranslate EPUB- 翻译 EPUB 文件
-
点击 "Run workflow" 按钮启动处理
-
处理完成后,结果将保存在你配置的 S3 存储中
如果没有美国信用卡,可以在 Backblaze 获取免费的 10GB 存储空间:
- 注册 Backblaze 账户
- 在 我的设置 里面启用 B2 云存储
- 在 应用密钥 页面生成新的主应用程序密钥(可以记录 keyID 和 applicationKey,但不会用到)
- 创建一个 S3 存储桶,例如命名为
translator - 记录下 Endpoint,前面加上
https://后就是之后要用到的s3_endpoint - 添加新的应用程序密钥,选择允许访问所有(all)存储桶
- 记录下 keyID(对应配置中的
s3_access_key_id)和 applicationKey(对应配置中的s3_secret_access_key)
如果有美国信用卡,可以在 Cloudflare 获取免费的 10GB 存储空间:
- 登录 Cloudflare 账户
- 转到 R2 - Manage R2 API Tokens - Create API Token
- 允许读写权限
- 记下 access key、secret key 和 endpoint(完整的 URL,包括 https://)
- 创建一个 S3 存储桶,例如命名为
book
- 访问 Google AI Studio
- 创建一个 API 密钥
- 将密钥复制到配置文件中的
google_api_key字段
创建一个 config.yaml 文件,填入以下信息:
title: 书籍原始标题
target_title: 书籍翻译后的标题
author: 作者名
google_api_key: 你的Google API密钥
model: gemini-2.5-pro-preview-03-25 or gemini-2.5-flash-preview-04-17
target_language: Chinese
source_language: English
s3_access_key_id: 你的S3访问密钥ID
s3_secret_access_key: 你的S3访问密钥
s3_bucket_name: 你的S3存储桶名称
s3_endpoint: 你的S3端点URL
num_retries: 3 # API调用失败时的重试次数
max_backoff_seconds: 30 # 重试时的最大退避时间(秒)
previous_content_limit: 0 # 设置翻译时使用的前文上下文字符数(0表示不使用上下文,可减少Token消耗)
max_continuation_attempts: 3 # HTML响应不完整时的最大继续尝试次数如果你能够直接访问 Google Gemini API,也可以在本地运行:
- Python 3.11+
- Poetry(依赖管理)
- Google Gemini API 密钥
- S3 兼容存储(可选,用于文件同步和备份)
- 克隆仓库:
git clone https://github.com/yourusername/pdf2epub.git
cd pdf2epub- 使用 Poetry 安装依赖:
pip install poetry
poetry install- 复制示例配置文件:
cp config.yaml.example config.yaml- 编辑
config.yaml文件,填入必要信息
-
将 PDF 文件放在
output/书名/input.pdf路径下 -
运行 PDF 结构分析:
python src/breakdown.py -c config.yaml -i output/书名/input.pdf- 生成 EPUB:
python src/generate_epub.py --input output/书名/input.pdf --config config.yaml- 翻译 EPUB(可选):
python src/translate_epub.py --input output/书名/input.epub --config config.yaml- 将 PDF 书籍转换为 EPUB 格式
- 翻译 EPUB 书籍(支持多种语言)
- 自动提取和处理书籍结构(目录、章节等)
- 保留原始格式和图片
- 支持大型 PDF 文件的压缩
- 使用 S3 兼容存储进行文件同步和备份
- 支持 GitHub Actions 自动化处理
处理后的文件将按以下结构组织:
output/
└── 书名/
├── input.pdf # 原始PDF文件
├── book_structure.json # 书籍结构数据
├── 书名.epub # 生成的EPUB文件
├── 翻译后书名.epub # 翻译后的EPUB文件(如果进行了翻译)
├── generation_progress.json # EPUB生成进度
├── translation_progress.json # 翻译进度
├── extract/ # EPUB提取的内容
├── translated/ # 翻译后的内容
└── epub/ # EPUB构建文件
根据你的需求,某些配置项可能是可选的:
-
如果只进行 PDF 到 EPUB 的转换(不翻译):
- 不需要设置
target_title、target_language、source_language
- 不需要设置
-
如果只进行 EPUB 翻译(不从 PDF 生成 EPUB):
- 所有配置项都需要设置
- 目前只推荐使用 gemini-2.5-pro 或 gemini-2.5-flash 模型,因为只有这个模型能将 PDF 直接转换为 HTML
- 书名中不要加特殊符号,以避免文件路径问题
- PDF 文件大小限制为 45MB,超过此限制的文件将被自动压缩
- 处理大型 PDF 可能需要较长时间,请耐心等待
- 翻译过程可能会因为 API 限制而暂时失败,系统会自动重试
- 目前 EPUB 生成功能主要在日文书籍上进行了测试,其他语言可能需要调整
- 推荐使用 Calibre 进行格式转换:由于 Gemini 生成的 HTML 可能不完全符合标准,建议在输入前和输出后使用 Calibre 进行格式转换,以确保最佳兼容性
欢迎提交 Pull Request 或创建 Issue 来改进这个项目。
不用打钱也不用点星星,请广泛传播并立即关注知乎用户 甚谁 谢谢喵