PDF / Word 合并转 Kindle 电子书
Overview
把当前目录下任意数量的 PDF 与 DOCX 合并成一本能在 Kindle 上打开的电子书。
流程为:各自转为 EPUB → 合并为单本 EPUB → 再转 MOBI / AZW3。
核心工具是 Calibre 的 ebook-convert(转格式)与随包附带的 merge_epubs.py(多本 EPUB 合并,因为 Calibre 9.x 起已不再提供命令行 ebook-merge)。
When To Use
- 用户想把多份 PDF/Word 资料合并成一本 Kindle 书。
- 用户问「PDF、Word 怎么合并转成 mobi / azw3 给 Kindle 看」。
- 用户要求「一键合并+转换脚本」。
- 注意区分:若只是单文件转格式(不是合并),直接用
ebook-convert即可,无需本 skill 的合并步骤。
Dependencies(必装)
- Calibre(提供
ebook-convert): - macOS:官网下载 dmg 安装 → 命令行工具位于
/Applications/calibre.app/Contents/MacOS/ebook-convert - Linux/Windows:
ebook-convert在 PATH 中 - 下载:https://calibre-ebook.com
- Python 3(标准库即可,用于
merge_epubs.py)
安装 Calibre 的坑(重要)
- 不要依赖
brew install --cask calibre。在受限沙箱/CI 环境里,brew 对 cask 下载会强制套一层sandbox-exec,而本环境不允许嵌套沙箱,会报sandbox_apply: Operation not permitted导致下载失败;即便设HOMEBREW_NO_SANDBOX=1也救不了 cask 下载。 - 正确做法:直接从官网下载 dmg 手动安装(macOS),或 Linux 用发行版包管理器 / 官方二进制。
Workflow
方式一:用随包脚本一键完成(推荐)
把 scripts/make_kindle.sh 与 scripts/merge_epubs.py 放到同一个目录(即放有 PDF/DOCX 的资料目录),然后:
# 在该资料目录下执行
bash make_kindle.sh # 书名默认"合并电子书",作者默认"WorkBuddy"
bash make_kindle.sh "我的资料" "小明" # 自定义书名/作者
脚本自动完成三步:
- [1/3] 各文件转 EPUB:扫描当前目录(不含
kindle_book/)下所有*.pdf/*.docx,依次ebook-convert转成 EPUB,已存在的跳过。 - [2/3] 合并为单本 EPUB:调用
merge_epubs.py把多本 EPUB 拼成一本,重排 OPF/NCX 目录。 - [3/3] 转 MOBI 与 AZW3:同一本 EPUB 输出
kindle_book/<书名>.mobi与.azw3。
产物在 kindle_book/:*.mobi(老格式,体积较小)、*.azw3(推荐,排版更好)、*.epub(中间件)。
> 固定章节顺序:编辑 make_kindle.sh 里的 mapfile ... find ... | sort 那一行,替换为手动数组 INPUTS=("第一章.pdf" "第二章.docx" ...)。
> 改了源文件后,删掉 kindle_book/ 重跑即可全量重转。
方式二:手动分步(便于排错)
CB="/Applications/calibre.app/Contents/MacOS" # 或 ebook-convert 所在目录
# 1) 逐个转 EPUB
"$CB/ebook-convert" a.pdf out/a.epub --title "A" --authors "作者" --pretty-print
"$CB/ebook-convert" b.docx out/b.epub --title "B" --authors "作者" --pretty-print
# 2) 合并
python3 merge_epubs.py out/merged.epub out/a.epub out/b.epub
# 3) 转 Kindle 格式
"$CB/ebook-convert" out/merged.epub out/merged.mobi --output-profile kindle
"$CB/ebook-convert" out/merged.epub out/merged.azw3 --output-profile kindle
传书到 Kindle
- USB 拷贝(最稳):连上 Kindle,把
.mobi或.azw3拷到documents/目录,弹出后自动入库。 - 邮件推送「发送至 Kindle」:⚠️ 自 2022-08 起亚马逊不再接收
.mobi。若要用邮件推送,请改用 AZW3 / EPUB / PDF,不要发 mobi。
已知局限与优化建议
- PDF 是固定版式:Calibre 转 PDF 默认产出 EPUB2,且很可能把页面做成图片页——在 Kindle 上能看,但无法重排、不能调字号、不能选字(扫描版/多栏/图表 PDF 尤甚)。Word(.docx) 转出的 EPUB 是文字流,可正常重排,体验最好。
- 优化 PDF 阅读体验:若介意 PDF 那几本,先把 PDF 用 OCR(如
ocrmypdf)或另存为 Word/文本,再纳入合并,效果会好很多。 - 合并策略:
merge_epubs.py把每本源整体塞进p{i}/子目录再重排 OPF/NCX,目录层级为「各部分 + 其原有子节」,互不干扰,对 Calibre 产出的 EPUB2 稳定可用。
Resources
scripts/make_kindle.sh:一键流程入口(自动扫描目录、跨平台探测 Calibre 与 python)。scripts/merge_epubs.py:多 EPUB 合并工具(纯标准库,输出 EPUB2,重排 OPF/NCX 目录)。