继续之前的工作。因为kindle支持的格式有限,所以剩下的只有mobi,pdf两个选择了。找了半天没找到合适的制作mobi文件的模块,所以选用了一个不错的制作pdf的模块——reportlab。
昨天折腾了半天,发现reportlab-userguide的第二章中最简单的helloworld例程输出的pdf文件在电脑中看还正常,在kindle的竖屏模式中看就没有字了,不过横屏模式倒是可以看到字。
我以一个什么都不知道的普通用户的心态猜测了下,可能是kindle为了尽可能将pdf表现的和txt文件差不多,采用了比较奇葩的解析方式,这样竖屏看的时候字比较大。
于是又把后面几张大概看了看,最后还是成功的输出了可以在kindle上阅读的pdf文件。
# 首先import需要用到的模块 from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer from reportlab.lib.styles import getSampleStyleSheet from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont
其中后两条是为了使用自定义的字体。因为不太清楚kindle支持的中文字体有哪些,所以使用了华文宋体。
# 准备要用到的一些东西 STSong = r"/home/juiceyang/jianshuDownloader/STSong.TTF" # 将华文中宋字体的注册名为"STSong"的字体,当然也可以取别的名字 pdfmetrics.registerFont(TTFont("STSong", STSong)) # 要生成的pdf的尺寸,对应的是kpw2的6寸屏,单位是postpoints kpw2_size = (331.2, 476.2) # 使用华文中宋的style模板,style的属性之类的可以看reportlab-userguide的5.6一节 styles = getSampleStyleSheet() style = styles["Normal"] style.fontName = "STSong"
STSong.TTF是从网上下载的字体文件,也许应该换成开源字体,不过为了做样例,就不再细改了。
# 新建一个文档 doc = SimpleDocTemplate("你好世界.pdf", pagesize=kpw2_size) # 开头先插一个大空白 Story = [Spacer(1, 20)] # 插入简体中文 chs = "我能吞下玻璃而不伤身体。" p = Paragraph(chs, style) Story.append(p) Story.append(Spacer(1, 10)) # 插入繁体中文 cht = "我克藝吃玻璃,我不毀受傷。" p = Paragraph(cht, style) Story.append(p) Story.append(Spacer(1, 10)) # 插入日文 jap = "私は硝子を食べられます。私を傷付けません。" p = Paragraph(jap, style) Story.append(p) # 韩文不太常见就不测试了,输出文档 doc.build(Story)
最后输出的pdf的效果和在kindle上看得效果分别如下:
可以看出,kindle中竖屏模式浏览的效果和电脑上看的效果还是有些差别的,明显字大了很多。