如何快速无损修复推送失败的 EPUB 格式电子书文件
前不久,亚马逊 Kindle 个人文档服务已原生支持推送 EPUB 格式,但是很多小伙伴在尝试推送后反馈,有个别的 EPUB 格式电子书文件无法成功推送,会收到如下所示的系统退信。
尊敬的客户:
2022年5月3日13:14 发送的以下文档无法发送到您指定的 Kindle:
* XXXXXX.epub
Kindle 个人文档服务可以转换并发送以下类型的文档:
Microsoft Word(.doc、.docx)
富文本格式 (.rtf)
HTML(.htm、.html)
文本 (.txt) 文档
存档的文档(zip、x-zip)和压缩的存档文档
Mobi 图书
类型为 JPEG (.jpg)、GIF (.gif)、位图 (.bmp) 和 PNG 图像 (.png) 的图像。
可以实验性地将 Adobe PDF (.pdf) 转换为 Kindle 格式并发送。
如果失败的文档属于上述某个文档类型,请确保该文档未受密码保护或加密。
对于个人文档附件的有用提示:
附加的每个个人文档的文件大小应小于 50MB(在压缩成 ZIP 文件之前)
提交的电子邮件中包含的个人文档附件不应超过 25 个
您可以在我们的帮助页面上详细了解如何将个人文档传输到 Kindle:
http://www.amazon.cn/Kindledocuments/
如果您需要立即的协助,请拨打 4008170100(国内客户) 或 +86-22-59677408(国际客户),与客户支持部门联络。
此致,
Amazon Kindle 支持
书伴从几位小伙伴那里收集到一些推送失败的 EPUB 文件,并做了一些测试以找出这些“问题文件”的共通之处,发现这些问题可以通过较为便捷的方式解决,现将解决方法分享如下。
一、问题分析
亚马逊的个人文档服务对推送的 EPUB 文件有较强的容错机制,即便有些内容不符合 EPUB 规范,一般情况下也能被正常处理,但是唯独对 EPUB 2.0 的导航控制文件 toc.ncx[1] 及 EPUB 3.0 的导航文档 nav.xhtml[2] 比较敏感,如果这两个文件存在“错误”,就会大概率导致推送失败。
对于 EPUB 2.0 的 toc.ncx 文件,常见的错误是由于 EPUB 电子书制作不规范,导致出现了重复的 playOrder 的值,当你用 EPUBCheck[3] 验证这样的电子书时,会看到如下所示的错误提示:
Error while parsing file: identical playOrder values for navPoint/navTarget/pageTarget that do not refer to same target
对于 EPUB 3.0 的 nav.xhtml 文件,即便是符合 EPUB 规范,Kindle 个人文档服务也无法正确处理,而违反规范删掉所有导航列表后反倒可以正确处理。这可能是因为 Kindle 个人文档服务负责格式转换的程序未能很好的支持 EPUB 3.0 导致的,今后是否会有所改进有待观察。
尽管可以使用 EPUB 验证工具 EPUBCheck 找出 EPUB 文件所有不符合规范的地方,但是为了提高效率,不建议这样做,毕竟最终目的是让 EPUB 文件能被 Kindle 个人文档服务正常处理。
二、解决方法
解决此问题常见的一个方法是先用 Calibre 将 EPUB 格式转成其它格式再转回 EPUB 格式,但是这可能会对内容或排版产生一定的影响,且在某些情况下不一定有效,如果电子书比较大,转换的过程也较为耗费时间。由于问题的症结只存在于特定文件,也没必要对整本电子书进行转换。
因此,这里推荐使用 EPUB 编辑器 Sigil,通过其提供的一些便捷功能快速修复“问题文件”。
通过下面的链接下载并安装 Sigil 软件(注意选择适用于你所用操作系统的版本):
- 下载 Sigil:官方发布页面
安装完成后,用 Sigil 打开推送失败的 EPUB 文件。这时可能会出现如下所示对话框:
提示信息的大意是:此 EPUB 中的 HTML 文件格式欠佳,或缺失了 DOCTYPE、html、head、body 元素。Sigl 会自动修复这些文件,尽管在极端情况下,这可能会导致轻微的数据丢失。
除非有特殊需要,建议点击【Yes】按钮让 Sigil 自动修复 EPUB 文件中有问题的 HTML 代码。
接下来修复 EPUB 2.0 的 toc.ncx 文件或 EPUB 3.0 的 nav.xhtml 文件。
用 Sigil 打开 EPUB 文件,依次点击菜单【工具(Tools) → 目录(Table Of Contents) → 生成目录…(Generate Table Of Contents…)】(或使用快捷键【Command + T】。
最后点击左上角的软盘图标按钮(或按快捷键【Command + S】)保存修改后的文件。
至此,如果你的 EPUB 文件符合上面的问题描述,修复后的 EPUB 文件就能正常推送了。
* 注意:Kindle 仅支持两级目录,如果 EPUB 文件有三级目录,Kindle 个人文档服务在转换时会将其忽略,从而造成 Kindle 的【前往】功能无法正确导航。要解决此问题,请使用 Sigil 的目录编辑功能【Tools(工具) → Table Of Contents(目录) → Edit Table Of Contents…(编辑目录…)】,在保持两级目录的基础上自行调整。
更多解决方法可参考《推送 EPUB 格式电子书到 Kindle 的常见问题解决方法》这篇文章。
三、自行修复
由于受限于 EPUB 文件样本数量,以上解决方法可能无法覆盖所有情况,如果你使用此方法修复 EPUB 文件后仍然推送失败,可以尝试自己修复有问题的 EPUB 文件,以下是两种可行的方法。
1、检测 EPUB 是否有违规范
尝试自行修复 EPUB 文件时,你可能需要知道 EPUB 文件都存在哪些问题,书伴推荐 Sigil + EpubCheck 插件这对软件组合,检查存在于 EPUB 文件中违反规范的地方并加以修复。
具体如何使用 Sigil 和 EpubCheck 插件这两个软件组合检查和修复 EPUB 文件,书伴在《如何利用 Sigil 和 EpubCheck 插件检查和修复 EPUB 文件》这篇文章中做了详细介绍,敬请参考。
2、KindleGen 测试格式转换
你也可以尝试用 KindleGen 转换推送失败的 EPUB 文件,目的是模拟亚马逊服务器的格式转换过程,如果在转换的过程中出现带有 Error 错误提示信息(带 Warning 的没关系),就找到了问题所在,按照提示信息用 Sigil 修复相应的地方,一般情况下都可以成功推送。
- [1] 参见 EPUB 2.0.1 规范中关于“声明式全局导航”的定义“2.4.1: Declarative Global Navigation — the NCX” via
- [2] 参见 EPUB 3.3 规范中关于“导航文档”的定义“7. EPUB navigation document” via
- [3] EPUBCheck 是一款用于验证 EPUB 出版物是否符合 EPUB 规范的工具 via
© 「书伴」原创文章,转载请注明出处及原文链接:https://bookfere.com/post/973.html
There was a problem with the document(s) you sent to Kindle
The following document, sent by you at 2022年11月18日17:39, could not be delivered to the address you specified due to a service failure
请问这个提示是什么原因?可以修复吗?
看起来是服亚马逊的服务器问题,可能是临时性故障,现在应该没问题了吧。
为什么我的书有二级目录,点自动生成目录,变成了只有一级目录了
如果 Sigil 的生成目录功能破坏了目录层级,你可以用 Sigil 的目录编辑功能【Tools(工具) → Table Of Contents(目录) → Edit Table Of Contents…(编辑目录…)】调整一下。
请问下怎么编辑目录呀?进去那个页面后怎么自行调整不会emmm
如果是想要调整目录的层级,下面是常用的操作:
编辑完成后点击【OK】 按钮保存即可。
感谢作者,太有用了!
请问EpubCheck检查错误提示为:”Col: 65: ERROR(RSC-005): Error while parsing file: value of attribute “”id”” is invalid; must be an XML name without colons”应该如何处理,文档是用kindlegen生成的
看起来是某些 HTML 元素的 id 属性值不符合 EPUB 规范,解决方法就是错误提示中的“must be an XML name without colons”,一般情况下改成非数字开头的字母数字下划线就可以了。