calibre使用技巧与常见问题

本文最后更新:2012-02-27,使用calibre版本0.8.41。

最近因为开发盛大锦书Bambook的SNB格式的calibre插件,更多的使用了calibre和研究了它的实现,也在论坛上看很多对calibre使用上的问题。干脆在这里写上一贴,把常见问题(尤其是中文相关的问题)做一总结。本文会不定期更新。

  • 什么是calibre?

calibre是一个一站式的电子书籍管理软件,提供电子书籍管理、元信息整理、格式转换、阅读设备书籍同步、新闻下载等功能。可以近似把它类比为电子书界的iTunes。它使用Python开发,是一个跨平台的自由软件。

calibre不是一个电子书下载软件,它只能从网上下载书籍的信息,但不能下载书籍本身。calibre不是电子书制作工具,虽然它提供格式转换功能,且在转换过程中提供一些定制功能,但这些功能非常有限,并不能用于精细控制和从头制作电子书。

  • calibre的优缺点

优点是功能全,可定制化程度高,可以折腾。缺点是体积庞大、速度慢、BUG较多(不过修得很快)。

  • 中文TXT文件转换成别的格式后全部变为乱码

因为Windows上大部分中文TXT文件是用System Codepage编码的,而calibre默认用UTF-8编码解析。解决方法是:可以把文件转成UTF-8编码后再放入calibre转换格式;也可以在calibre的转换对话框(在主界面上选一个文件,点“转换书籍”,或按C键)中左边选择“外观”,然后在右侧的“输入字符编码”中填入“gbk”或“gb18030”,calibre就可以正常转换格式了。必要的时候也可以在也“首选项”->“常规选项“中的”外观“设置组中做全局的设置。

  • 中文文档转换后内容全部变成拼音

在calibre的转换对话框中左边选择“外观”,去掉“转换unidcode字符到ASCII”的选项。

  • 自动生成的封面图片中的中文字符变成问号

calibre自带并硬编码了一些字体文件,这些字体中不包含中文字符,渲染出来的图片就只能显示成问号了。解决方案是:打开首选项->优化调整->设置在生成默认封面时所使用的字体,分别修改generate_cover_foot_font和 generate_cover_title_font的值来改变封面标题和页脚的字体。比如:generate_cover_title_font=”c:\\windows\\fonts\\simhei.ttf”就可以改用黑体。修改后需要重启calibre才可以生效。如果电脑上没有 simhei.ttf这个字体,也可以换成任意路径下的任意字符文件。

对于0.7.25以前版本的用户:用中文字体替换掉英文字体:在calibre安装目录下找到resources\fonts \liberation目录,用中文字体(比如文泉驿微米黑)替换掉里面的LiberationMono-Regular.ttf和LiberationSerif-Bold.ttf即可(删除原来的字体文件,把中文字体文件放进去并改名成这两个名字)。

还有一个解决方案是直接安装Generate Cover插件,用它可以更精细的定制生成的封面样式。可以在首选项->插件->获取新的插件中直接在线安装。

  • “保存到磁盘”和“发送到设备”后中文文件名变为拼音

为了保证在各个平台各种文件系统下文件都可以正常的保存,calibre的作者采用了把非英语字符转为英语字符的方式来解决多语言文件名,中文就变成拼音了。对于“保存到磁盘”,可以去掉“首选项”->“保存图书到磁盘”->“将非英语字符转换为对应英语字符”的选项来强制calibre以原始字符保存文件名。不过这个功能有Bug,对于有些字符,保存后会乱码。对于“发送到设备”,目前没有解决方案。不过总的来说,只有极少数阅读器设备(如iRiver Story)的书架是用文件名而不是用图书元信息来显示的,所以对大部分阅读器而言即使用拼音文件名也不会带来太多的不便。

  • 什么叫“排序作者”?

老外的名字常常是名在前,姓在后,而称呼他们的时候又常常要用姓。比如Bill Gates,我们通常称呼他为Gates,这样如果直接用Bill Gates来排序所有的作者,就会不太好找。为了解决这个问题,常常就把“作者”字段设为“Bill Gates”,把“排序作者”字段设为“Gates, Bill”,这样就又好看又好找了。对于中文书籍的作者字段来说,其实是基本不存在这个问题的,直接把两个字段设成相同的就可以了。所以“排序作者”的实际含义是“用于排序的作者名字表示方式”,只不过这个词实在不知道有什么好的翻译方式,就只好用了这个生硬而难以理解的直译。

同理,还有“排序标题”也是类似的意思,就是“用来排序的标题”。

  • 元数据字段太少,可以自定义增加吗?

在“首选项”中的“增加栏目“中添加自定义字段。添加后在书籍列表中就会出现相应的列,在编辑元数据对话框中会多出”自定义元数据“的页面。

  • 书籍在calibre的书库中保存时,能不能不要用拼音文件名?

不能,calibre的作者不会针对这个问题有任何的改变。因为calibre就是这么设计的,它希望你通过它的界面去操作它所管理的文件,并不希望你直接去碰它的书库目录,而且用拼音保存可以有最好的跨平台和跨文件系统的支持。

  • 用calibre抓取新闻时常常抓不下来,或者抓取的内容不完整

你可以提交一个Bug报告给calibre项目或我,附上抓新闻的任务的日志。这类问题需要一个个有针对性的分析。不过有一点要提醒的是:在国内因为众所周知的原因,有些网站和RSS提供商是无法访问的,Google Reader也可能会间歇性的无法访问,你可能要先设法排除一下是不是这个原因引起的新闻抓取失败。

  • cailbre抓取新闻生成的电子书中,每一个新闻频道的标题中中文都是乱码或方框

可以修改所抓取新闻的Recipe的代码,加入一个自定义的masthead_url。详见:http://www.hi-pda.com/forum/viewthread.php?tid=892915&extra=page%3D1

对于0.8.41以后的calibre版本,首选项->优化调整->设置在生成默认封面时所使用的字体中的generate_cover_title_font值对标题图片生成也会生效。可以参考上面的“自动生成的封面图片中的中文字符变成问号”一问的答案做类似的修改。

  • 任何阅读书籍或书籍格式转换任务都失败。日志中有UnicodeDecodeError字样的错误

可能是由于Windows的用户名中包含非英文字符,导致临时文件目录路径中包含非英文符。 以前calibre在处理非英文临时文件目录时有问题,但在0.8.41以后的版本中,这个问题应该已经被修复。

如果你发现问题仍存在,请向我或calibre项目提交Bug报告,临时应急的解决方案是:在“我的电脑”上右键点击“属性”,然后选择“高级”,再点“环境变量”,在变量TEMP和TMP上面点“编辑”,把原来的默认值%USERPROFILE%\Local Settings\Temp改为不包含非中文字符的路径,比如C:\Temp。

  • 可以用calibre编辑/修改电子书吗?

calibre是电子图书管理工具,所以并不适合用来编辑修改电子书。如果硬要做也只能通过格式转换过程中的正则表达式替换来完成,所以还是建议用别的软件来修改电子书。

对于epub和HTMLZ格式的电子书,calibre提供了“调整书籍”的功能,实际上是把电子书文件解包,用户手工修改后再自动打包起来而已。

  • calibre可以从豆瓣网下载图书元信息和封面吗?

可以,但这个功能在英文界面下默认是禁用的,只在中文界面下默认启用。但不管有没有自动启用,都可以通过首选项->元数据下载设置页来启用或禁用它。

豆瓣网不提供精确匹配书名和作者的搜索接口,所以有时会返回一些不太靠谱的结果,这个只能靠人工来选择有用的结果了。

我是calibre豆瓣元信息和封面下载插件的作者,如果对此相关功能有疑问,可以直接向我咨询。

  • calibre可以支持盛大锦书(Bambook)吗?

calibre为Bambook提供了最基本的支持,包括SNB格式的读取和转换,也可以向Bambook上直接传送SNB或PDF书籍。这些功能在Windows, Linux和Mac OS上都可以使用。

如果要使用除了格式转换外与Bambook设备相关的功能,需要先安装Bambook的运行库。盛大Bambook SDK的网站一直在维护中,我个人临时提供的SDK下载地址:http://www.freemindworld.com/tmp/BBSDKAll.zip

SDK解压后,把对应平台的文件放到系统库路径或calibre的lib或DLLs目录下即可。

USB 连接Bambook后,系统应该会增加一个网卡,在安装过云梯的Windows中,这个网卡会自动配置好,不需额外的操作。如果在没有安装过云梯的Windows下或者在Linux/Mac OS X下,需要为它手工配置192.168.250.1的IP。然后只要把Bambook用USB线连接到电脑上,calibre就可以连接这个Bambook设备了。

如果要通过Wi-Fi连接:在calibre的首选项->插件->设备界面插件中选中Bambook Device Interface,点下面的“定制插件”,在“设备IP地址”中输入Bambook的IP地址,然后保存并重启calibre。这时在主界面上的“连接/共享”菜单中就会出现“连接到锦书”,点它就可以通过无线连接到指定IP地址的Bambook。

我是calibre的Bambook设备插件的作者,对此有任何问题可以直接向我咨询。

如果您有任何有关calibre的问题,可以下面留言提出,我会尽量解答并挑选有代表性的放入正文。我也会不定期更新本文,添加更多常见的问题和calibre的使用技巧。

盛大Bambook锦书首发体验

虽然有段时间不太看好E Ink了,但上个月还是莫名其妙脑子发热预定了一个盛大的Bambook锦书。最近E Ink产品价格有很大松动,不过至少在一个月前,6寸屏的E Ink卖999的价格还是比较厚道的。

盛大对内测用户的不公对待和9月28日这样尴尬的发布日期(考虑到长假和物流速度)引发争议和失望无数,还好最后还是争了一口气(也要多亏那常常不争气的宅急送也争了口气),让一小半的预定用户在28日当天收到了Bambook,剩下的应该也有一大半可以在长假前收到。

谈谈到货后的第一体验。在快递员面前当面打开包装验机:包装没得说,内外两层都不错。Bambook自身的设计也算漂亮,做工精致,比某个号称做礼品级电纸书的厂商的产品要精美的多。开机速度则很让等着我验货快递员GG觉得不爽:大约需要90秒的时间,还好电子书很少需要关机。打开包装开机前屏幕上没有任何显示,其实如果像Kindle一样默认可以显示一个简单的使用说明也许会是个不错的设计。开机后有一个新用户向导,马马虎虎。

盛大Bambook锦书

盛大Bambook锦书

Bambook使用的是16级灰度的E Ink屏幕,指标上来看是不错的,不过如果只是看小说,也没有什么用处。我不看漫画,只能放张照片进去看看,确实比以前用的汉王N510的显示效果要好上很多。不过总体感觉上屏幕的底色比较重,“纸”不白,不知道是不是因为外壳太白的原因。

最值得一提的是翻页的速度,默认的情况下,翻页的速度已经非常快。比我见过的翰林V3、汉王N510和Kindle 2都要快上一大截。如果在设置中打开了“速度优先”模式,则翻页的速度更上一个台阶,几乎看不到翻页的闪屏过程了。不过这种模式下翻久了“纸”的底色会变得更加发灰。

Wi-Fi的功能基本可用,除非你的Wi-Fi配置用了证书之类的比较麻烦的东东。通过Wi-Fi使用“云中书城”的体验也还不错,尤其是同步RSS的功能,还是很方便的,只可惜现在还不支持自定义的RSS,只能同步官方提供的一些源。听书功能的TTS合成语音比想象中的要强,不过对于我来说,这个功能好像没什么用。

Bambook对于我来说的最大软肋就是不支持自有书的直接阅读,任何格式(包括TXT)都需要用盛大的“云梯”软件(Windows-Only)转换成盛大的私有格式SNB才能放入Bambook阅读。那个转换软件的能力实在是不能让人恭维。目前我的做法是先用calibre把文件都转成EPUB,然后再用盛大的软件转成SNB,勉强可用。PDF就算了,在不能横屏显示的6寸屏上,也不用对它指望什么了。

其它的缺点要列也是可以列出一大堆,鉴于目前国内电子书产品的整体现状,懒得写了,总之Bambook要做为一个盛大旗下的文学网站的专用阅读器,现在看起来是基本合格的。如果主要想用它看看别的自有书籍(尤其是非文学),还是要慎重。

最后说说可折腾性。Bambook的硬件配置总体来看还算不错,但如果想要把OpenInkpot这样的开源固件移植到Bambook上,目前来看还缺少太多的信息。虽然Bambook用了Android系统,目前也似乎还没有流传出任何有关如何折腾的信息。我试了一下,Bambook无论是用USB还是Wi-Fi,连接后都以是网络的形式与外界交换数据。默认情况下,USB连接电脑后,会以RNDIS/Ethernet Gadget的形式出现(Windows/Linux中都可以),默认配置了静态IP 192.168.250.2。如果用Wi-Fi,则是以DHCP的形式获取IP地址。用nmap工具扫描这两个地址,都只能看到它开放了一个5000号的TCP端口,设备与盛大“云梯”软件的数据交换都通过这个端口进行。所以目前唯一Hack出来的一点点东西就是可以通过修改“云梯”安装目录下的config.ini文件,把里面的IP地址由192.168.250.2改成Wi-Fi分配给Bambook的地址后,可以实现“云梯”与Bambook的无线互连。也有人在研究SNB的文件格式,目前来前只能算是有初步的进展。如果把它分析透了,也许以后可以给calibre写个插件直接生成SNB格式。

一个极客

一个极客

一个极客

响应一下由南京地铁、豆瓣地铁族网站主办的“南京,我想你!中秋寄语地铁大巡游”活动,设计此海报,不知道是否有幸可以贴到地铁列车上巡游南京。

最初的设想比现在的样子要更Geek,原来是想画一副ASCII艺术画,并且这个画的内容可以做为一个程序编译运行。这个程序运行起来会是一列运动的地铁列车,程序原型可以参考Linux中的sl命令。后来因为实现难度太大,而且做为海报而言并不会有很好的效果,所以仅保留了南京地铁列车的ASCII画,而且这个画也不能做为程序编译运行了。

画面上半部分的类“凡客体”词句中,借鉴了某TX的Blog中的内容,非常具有Bash.org上的Geek笑话风格。

有好友指出这个作品有很多设计缺陷,我只改了很小的一部分,留下了几个大的缺陷,这也许是我在日常工作中所学到的“妥协”的一部分。谢谢他的建议,这些建议也许对以后的工作会有指导意义。

自得其乐。

电子书籍管理软件 – calibre

calibre是一个免费的跨平台电子书籍管理软件,可以完成对各种格式的电子书籍的管理和格式转换。尤其对于拥有手机/iPad等电子阅读器或E Ink设备的同学来说,这个软件尤其具有价值。如果把电子书想象成MP3音乐的话,calibre的功能可以类比于iTunes。它还可以把网络上的新闻或RSS下载转换成电子书格式,同步到相关的阅读设备中,这是一个非常实用的功能。

calibre可以从Google Books或Amazon等网站下载书籍的元数据,包括书籍的名称、作者、出版社、封面或者读者评价等信息。对中文图书而言,豆瓣上的数据应该是一个不错的书籍元数据来源,所以我就给它加上了这个功能。

今天发布的0.7.7版本中正式具有了从豆瓣下载书籍元数据的功能,可以从“首选项”->“插件”->“元数据下载插件”中启用它。由于考虑到这个功能只对中国用户比较有价值,所以这个插件默认是被禁用的。

本来还实现了从豆瓣下载书籍封面的功能,但calibre的作者不喜欢我的实现方法,所以还在进一步讨论合适的实现方法。需要尝鲜的朋友,可以参考我在Launchpad上的calibre-experimental代码树中的版本号为5550-5553的代码改动。

对这个插件有任何建议或功能改进需求,可以在此留言或去calibre的Trac上提交一个Ticket。

尊重他人的劳动

刚才看自己的Google Analytics,发现之前发布的那个用于绘制火车运行图的开源项目train-graph在19日那天有几次集中来自forums.sun.com论坛的访问。

Google帮我找到了那个访问来源所在的贴子,在上面,我看到sabre150在抱怨说train-graph项目抄袭了他的代码。

看了贴子,我才想起来,曾经为了解决程序在读入带有BOM头的UTF-8文本文件出错的问题,我随便搜到了一个叫BOMStripperInputStream的类用了进去,用于在读文件时自动过滤掉没用的BOM头。这个类是sabre150在forums.sun.com上回复别人提出的类似的问题的时发布的,由于发布的代码中没有包含版权和许可证信息,我也就忘记了在文件中加上这个类的来源和出处。

知错就改,马上在代码中加上了作者和出处的信息,算是亡羊补牢。

经历这个事件,以后要吸取教训,就像自己的作品不希望被他人滥用一样,也要更懂得去尊重他人的劳动成果。这种尊重不应当仅仅是法律层面的遵守版权相关法律和相应许可证,即使对于Public Domain中的成果,也同样应该对原作者给予相应的尊重。

我的Blog上的内容一直以来是以CC协议发布,含义是“署名-相同方式共享”,也就是说可以自由的使用、发布、再加工这里的内容,但必须加上原作者的署名并以相似的协议来发布,除非得到原作者的特别允许。曾经发现过北方的某某小报和南京某某晚报违反CC协议使用过这里的内容,专业平面媒体对版权和许可证都是如此的漠视,可算是小小的悲哀。