2020-03-08 | 折腾

导出 kindle 个人文档

前几天下单了小米电纸书,虽然可以装 kindle apk,但是性能捉急体验极差电量掉得也快。
准备把 kindle 账号上的漫画导出来看。

导出个人文档

首先 Kindle 个人文档不能直接在 kindle 内容管理页面下载(至少我没发现)。
我是在手机上下载好,然后到 /sdcard/kindle/ 目录下复制出来的。

PRC 转 EPUB 格式

使用 Calibre 进行格式转换。因为我是漫画,在样式上出现一些问题。
漫画从 prc 转成 epub 后,只有封面展示正常,内容部分在电子书上渲染出来,有错位空白页等问题。

用 Calibre 电子书编辑器打开,发现是 calibre 提供的 css 样式导致的问题。

1
2
3
4
5
<div class="fs">
<div class="calibre2">
<img alt="Comic Book Images" class="singlepage" height="1092" src="images_00007.jpeg" width="700"/>
</div>
</div>

举个例子,这是其中一页内容。不是特别了解 css 和 epub 电子书格式,总之是 calibre 默认的样式并不适合漫画电子书渲染。
找到问题,修改样式肯定是可以的,但几十本书手动改可太蠢了。
研究了半天 calibre 的功能,转换工具提供的 css 自定义并不会用,正则匹配替换感觉也有些复杂。
还好搜索过程中发现了一个多看电子书的 feature。

添加多看漫画样式

上下居中图

这个属性在多看漫画书中用的比较多,当然你也可以用到普通的书里面。语法如下:

1
2
3
4
<spine>
<itemref idref="coverpage" properties="duokan-page-fullscreen">
……
</spine>

同样,对应的html文件只需要一张图片即可,不需要别的文字或者代码,就算写了多看也不会显示出来,而只会将图片上下居中显示。

作者:hyx108
链接:https://www.jianshu.com/p/ce7fa8b83da8

解压电子书,给 /EPUB/conten.opf 文件 spine 下的 itemref 加上 duokan-page-fullscreen 属性即可。

我们使用 EbookLib 这个库写段脚本。
目前并没有提供接口直接编辑 content.opf,直接暴力在源码里把这个属性加上了。

修改 EbookLib 源文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# epub.py
...

class EpubWriter(object):
...

# 修改 epub 输出函数
def _write_opf_spine(self, root, ncx_id):
...

# 直接在这把属性加上
opts['properties'] = 'duokan-page-fitwindow'
etree.SubElement(spine, 'itemref', opts)
...

convert 脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
import glob
import ebooklib
from ebooklib import epub
from ebooklib.plugins.base import BasePlugin

index = 1
opts = {}

for file in glob.glob("/path/to/your/*.epub"):
book = epub.read_epub(file)
epub.write_epub(file+".covert", book, opts)
print(str(index) + " done")
index = index + 1

over~

Ref