Skip to content

Instantly share code, notes, and snippets.

@easonlee24
Created February 26, 2014 06:47
Show Gist options
  • Save easonlee24/9224811 to your computer and use it in GitHub Desktop.
Save easonlee24/9224811 to your computer and use it in GitHub Desktop.
使用Calibre制作格式良好的mobi书籍
<p>这几天在搜一本书–《别独自用餐》,书怎么样先不谈。鄙人在网上费了九牛二虎之力,终于找到一本想要的mobi版本。下载下来 用Kindle for PC打开一看发现不是完整版的,得,只能退而求其次,下txt版的吧,毕竟下完可以用calibre转为mobi版,结果下了十多个版本发现基本全是只有前八章,积分被骗光了不说,还浪费了时间。</p>
<p>我郁闷出了内伤,在心里深深的鄙视了网上那群骗下载积分的,悲伤过后,我决定自己动手制作一个mobi版的。</p>
<p>一下午找了大量的资料,差不多算是搞懂了整个流程,现在把我所学到的分享出来,写的可能会有点啰嗦,因为我除了写怎么做以外,还想稍微谈谈为什么这么做,另外分享一些很好的资源,有心人可以参考。 <br>
<!--more--></p><div class="se-section-delimiter"></div>
<h1 id="目录">目录</h1>
<p><div class="toc"><div class="toc">
<ul>
<li><a href="#目录">目录</a></li>
<li><a href="#确定没有mobi版">确定没有mobi版?</a></li>
<li><a href="#那么开始吧">那么开始吧!</a><ul>
<li><a href="#1找到txt版本">1.找到TXT版本</a></li>
<li><a href="#2文字校对">2.文字校对</a></li>
<li><a href="#3用markdown排版">3.用Markdown排版</a></li>
<li><a href="#4生成mobi">4.生成mobi</a></li>
<li><a href="#5导出mobi书籍">5.导出mobi书籍</a></li>
</ul>
</li>
<li><a href="#总结">总结</a></li>
</ul>
</div>
</div>
</p>
<h1 id="确定没有mobi版">确定没有mobi版?</h1>
<p>也许是你的搜索技术有问题,先在mobi资源搜索网站<a href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;docId=1000234621" title="Kindle Publishing Programs">forfrigg</a>上再搜索一遍。如果在这个网站上没有搜到,那基本可以认为此书没有mobi版本。</p>
<p>你真的觉得此书非看不可?</p>
<p>你真的只想在kindle paperwhite上看它?</p>
<p>没有什么能够阻挡你的热情了?</p>
<p>很好,开始自己制作一个mobi版本吧!</p>
<h1 id="那么开始吧">那么开始吧!</h1>
<p>既然已经确定了没有mobi版本,那就自己动手吧。一旦你掌握了方法,地球人就再也阻止不了你用kindle看书啦!</p>
<p>我们首先想想:亚马逊kindle商店的那些电子书也是出版社的一些人员制作的,他们可以制作,我们为什么不可以?</p>
<p>其实亚马逊对于制作和发布电子书,提供了一些<a href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;docId=1000234621" title="Kindle Publishing Programs">指导</a>。包括如何制作格式对用户友好的电子书以及一些制作和发布电子书的工具。涉及的内容总结起来无非就是三点:<strong>内容+排版+发布到电子市场</strong>。</p>
<p>这篇文章只关注于内容与排版,即制作格式良好的mobi电子书,发布那一块暂不讨论。毕竟咱现在还没有开始写书,不能放到kindle上卖啊~(私下里做为一个奋斗的目标吧)</p>
<p>制作mobi有挺多思路,不过所有方法本质上最后都是通过把html文档转换成mobi,但html文档的获得的方式是多种多样的(一般没有html格式的书,都是通过txt、word、pdf等转的),因而有多种方法。除了kindle官方提供的软件外,还有很多其他第三方的工具辅助完成这一过程。</p>
<p><strong>使用到的软件</strong></p>
<p>1.<a href="http://www.calibre-ebook.com/">calibre</a>,本文使用最新版1.25。它的功能十分强大,包括书籍管理、书籍编辑、推送书籍到kindle及设备等,可以参考它的<a href="http://manual.calibre-ebook.com/">使用手册</a>。不过它最为人熟知的功能还是各种文件格式之间的转换。它的转换原理如下图所示:</p>
<p><img src="https://lh3.googleusercontent.com/Yl10si1VvKpihYShHrfMfz7dVsBsmmQfZojQI4BT4Q=s0" alt="Calibre格式转换原理" title="calibre转换原理.jpg"></p>
<p>2.Notpad++,文本编辑器</p>
<p>3.<a href="http://www.gidot.net/typesetter/" title="排版助手">Gidot Typesetter</a>,一款快速文本排版工具。 <br>
可以看到html在其中起到了桥梁的作用,它把输入格式转换为html,再把html转换为输出格式。</p>
<p>4.CAJViewer,提供PDF到txt的转换。</p>
<p><strong>总体思路:</strong></p>
<p>下面我以《别独自用餐》这本书作为例子,讲解mobi的制作过程。总体思路是得到此书的txt版本,然后在txt文件中插入markdown标记(这一步相当于<strong>排版</strong>),再用calibre把排版后的txt文件转换为mobi格式。</p>
<p>最后一步,calibre帮我们做了很多工作: <br>
1. 解析txt文件中的markdown标记 <br>
2. 转换解析后的文件为html格式 <br>
3. 转换html格式为mobi格式</p>
<h2 id="1找到txt版本">1.找到TXT版本</h2>
<p>还是在<a href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;docId=1000234621" title="Kindle Publishing Programs">forfrigg</a>上找txt版本,一般都能找到。但是有少量奇葩,比如本书并没有完整版的txt。这个时候只能出绝招啦:用pdf转txt。</p>
<p>这里分两种情况:一种是pdf本身是文字格式的,那好办,用Foxi Reder打开PDF另存为txt文档即可。另一种情况PDF是图片版本的,这个时候只能用OCR软件进行文字识别了。</p>
<p>本书只能找到扫描版的,从中选取最清晰的版本,用OCR软件转成txt。OCR软件有很多选择,我电脑上正好有一个CAJViewer,因而使用它。用CAJVIEW打开PDF,直接另存为txt文件即可。</p>
<p><img src="https://lh3.googleusercontent.com/gvTcNphbZmCN_mX68Sa_eWEQXEp7k3JSEXK-mRns9Q=w1073-h642" alt="enter image description here" title=""></p>
<p>在文字识别的过程中,如果出现错误(可能某页没有文字),不用管,点“关闭程序”,它会自动忽略此页的识别。</p>
<p><img src="https://lh5.googleusercontent.com/h5q67rajvOrNSgejHPdRXy5z1ZOT7OIUpIx19J2p4Q=w1075-h642-no" alt="enter image description here" title=""></p>
<h2 id="2文字校对">2.文字校对</h2>
<p>用PDF转换而来的txt文件中可能会把一些文字给识别错误,这时就需要校对。我们没有精力去一个字一个字的校对,这里只是针对ORC常见的识别错误进行校对。通过分析发现,识别后的主要问题出现在页眉和页脚上,只要快速去除这两个部分(是的,页脚的注释我没有要~)就能使得文章基本能够通读下来,正文中的一些标点错误或者个别错别字并不影响阅读。</p>
<p><img src="https://lh3.googleusercontent.com/-ufW5VIoNjpI/Uw7cxAEzKhI/AAAAAAAAAFM/O7SArarVpnY/w407-h607-no/%25E9%25A1%25B5%25E7%259C%2589%25E9%25A1%25B5%25E8%2584%259A.jpg" alt="enter image description here" title=""></p>
<p>这里,首先使用<a href="http://www.calibre-ebook.com/">GIDOT TYPESETTER</a>进行快速排版,这个软件很棒,可以用来控制段落的换行、缩进、全角转半角、繁体字转简体字。</p>
<p>此处使用这个软件主要为了: <br>
1. 删除段落内的换行,这样某一段在notpad里只会以一行出现。方便快速识别“章标题”、“页眉”和“页脚” <br>
2. 段首不缩进 <br>
3. 段间空一格</p>
<p>用GIDOT打开txt文档,设置一下,点“执行”。设置如下图所示。</p>
<p><img src="https://lh5.googleusercontent.com/BbpGjZi5NLSqjSlgxCn-5gUdYBO_y750hDKoJCy0JA=w916-h586-no" alt="enter image description here" title=""></p>
<p>打开转换后的文档。可以看到,“章标题”、“页眉”和“页脚”现在可以快速的识别出来,它们的共同特点是长度都比较小。 <br>
<img src="https://lh3.googleusercontent.com/hnVpSmRqEkJCv6z_GFH1hKTOh_3KZgoBx6DjF4y48A=w1118-h599-no" alt="enter image description here" title=""> <br>
对于“页眉”,直接删除。但是有的“页眉”删除后需要把前后两段进行合并(因为它们其实是一段),比如页眉2的情况。 <br>
对于“页脚”,直接删除,我不打算保留注释信息。 <br>
对于“章标题”,则需要标记一下,下节再说。</p>
<h2 id="3用markdown排版">3.用Markdown排版</h2>
<p>内容基本搞定以后,可以开始排版了。本质上,kindle是使用html+css来对文档进行排版的。</p>
<p>但是,没有人会直接使用html写书,我们通过在txt文档中加入一些markdown标记来进行排版,加入标记后的文档经过程序解析以后可以自动生成html文档,这也就是markdown的作用。</p>
<p>简单介绍一下markdown,它其实指两样东西: <br>
1. 一套语法规范,即用什么符号表示html中的各种标记 <br>
2. 一套软件,可以把包含markdown标记的文本转换成html或者xhtml</p>
<p>说白了,markdown就是提供了一套简单的方法书写html,现在网络上的各种网站都支持用markdown来写文章(如Github和Stackoverflow),本文也是用markdown写的。关于markdown的语法,可以参考<a href="http://daringfireball.net/projects/markdown/">daringfireball</a></p>
<p>kindle的排版水很深,比如kindle并不支持所有的html标记,哪些标记可用哪些不可用?每一种html标记采取什么样的样式?章标题怎么排版?正文怎么排版?段之间要缩进吗?图片怎么布局?表格呢?这些东西涉及到html和css相关的知识以及kindle的规范,如果有兴趣的读者,我推荐几个比较好的参考资料,自己可以去研究一下: <br>
1. <a href="http://www.kuaipan.cn/file/id_42701213397083824.htm">Amazon Kindle Publishing Guidelines</a> 官方参考文档 <br>
2. <a href="http://kindleformatting.com/">Kindle Formating</a>,这个网站的作者在推销他写的一本书《Kindle Formatting: The Complete Guide》,网站上有一些干货,比如<a href="http://kindleformatting.com/book/files/KindleHTMLtags.pdf">kindle支持的html和css</a>以及<a href="http://kindleformatting.com/book/">css模板推荐</a> <br>
3. <a href="http://www.idsystem.cz/kindle/">Formatting HTML for Kindle</a> <br>
相信看完上面的资料,你可以去考虑去帮出版社做电子书啦~~</p>
<p>一开始没必要搞得太复杂,也不需要搞得太复杂,通过实践发现,只要做到如下几点,基本上mobi的呈现效果就比较美观了: <br>
1. 标记章标题(本书设置两级标题) <br>
2. 正文样式,即每一段的样式。(本书正文样式是首行缩进,段间空一行) <br>
3. 合适的部分加粗 <br>
4. 不要使用markdown的列表标记,这个后面很难排版。</p>
<p>确定了目标以后开始行动,在txt文档中加markdown标记。如下图所示。</p>
<p><img src="https://lh5.googleusercontent.com/VVbqq0cws4t0e8ycWyqibh4cvvULkdkBOJoxWwsHhg=w1118-h399-no" alt="enter image description here" title=""></p>
<p><img src="https://lh3.googleusercontent.com/4I-6FkiK5c15B_oAFLzd838Ete_VNJwNdTVnM_UL7Q=w1118-h493-no" alt="enter image description here" title=""></p>
<p>主要包括几个部分: <br>
1. 一级标题前面加#,二级标题前面加##。分别对应于html中的h1和h2标记。 <br>
2. 一级标题的下一行加<mbp:pagebrak>,这在mobi中是分页标记。 <br>
3. 引用一段话时,在每一行的最前面加上”&gt;”,它对应于html中的blockquotes标记 <br>
4. 直接在文本中内嵌html标记,这是可以的。我加上”p class=”right”“是为了实现右对齐,(当然还要配合css,后面会讲css的配置)。这也演示了如何直接在txt中插入html标记获取更大的控制权。毕竟markdown支持的标记只是html的一个子集,markdown不能干的,我们直接用html写 <br>
5. 对于要加粗的文字,前后使用”**”包围。</mbp:pagebrak></p>
<p>好了,现在基本上完成了排版部分。如上面所说,本文只涉及到最简单但也是最实用的排版,至于图片、表格、文本对齐等等功能,读者感兴趣可以自行阅读我上面给出的参考资料,只要掌握一些html以及css知识,基本上是难不倒你的。</p>
<h2 id="4生成mobi">4.生成mobi</h2>
<p>完成排版以后,使用calibre把txt转换成mobi。首先用calibre“添加书籍”,然后点“转换书籍”,在”转换书籍页面“有好多配置选项,它们控制生成的mobi样式。每一项的具体含义可以参见<a href="http://manual.calibre-ebook.com/conversion.html" title="Ebook Conversion">官网的介绍</a>。</p>
<p>下面以本书的制作为例,介绍一下每一个配置页面应该注意的问题。 <br>
<strong>1.输入格式为txt,输出格式为mobi</strong></p>
<p><strong>2.元数据</strong></p>
<p>这些数据最好添加上,尤其是作者名和封面,生成的mobi会好看一些。</p>
<p><strong>3.界面外观</strong></p>
<p><img src="https://lh4.googleusercontent.com/-9EtZtPenRZA/Uw7cuumJ6sI/AAAAAAAAAEs/-WQ4oIPgoFA/w841-h642-no/%25E7%2595%258C%25E9%259D%25A2%25E5%25A4%2596%25E8%25A7%2582.jpg" alt="enter image description here" title=""></p>
<p>这里有两个地方要注意:</p>
<p>1.添加”附加CSS”,这个控制每一个html标记怎么排版。calibre有一个默认的css样式集,通过提供附加的css规则,可以修改默认行为。</p>
<p>我参考了<a href="http://kindleformatting.com/book/">css模板推荐</a>里的模板定制了自己的:</p>
<pre><code>h1{text-indent: 0;text-align: center;margin: 0 auto;font-size:2.0em;font-weight: bold;page-break-before: always;}
h2{text-indent: 0;text-align: center;margin: 50px 0 0 0;font-size: 1.5em;font-weight: bold;page-break-before: always;}
p{ text-indent: 2em; margin: 1em 0 0 0; }
p.right{text-indent: 0; text-align:right;}
</code></pre>
<p>这段css规定了标题居中显示、正文首行缩进且段间空行,p.right表示右对齐,还记得上文中的”p class=”right”标记吗?它的右对齐就是由这里的p.right控制。</p>
<p><strong>4.智能处理、页面设置与结构检测使用默认设置就可以</strong></p>
<p><strong>5.内容目录</strong></p>
<p>这个是用来控制生成mobi目录的,很重要。本书只使用了二级目录,如下设置即可</p>
<p><img src="https://lh3.googleusercontent.com/-tn1owJ4jVQM/Uw7cwkfYMSI/AAAAAAAAAFI/rgPARJFdch4/w845-h642-no/%25E7%259B%25AE%25E5%25BD%2595%25E8%25AE%25BE%25E7%25BD%25AE.jpg" alt="enter image description here" title=""></p>
<p><strong>6.TXT输入</strong></p>
<p>这里有一个地方要注意,格式样式一定要选”markdown“,不然txt中的markdown标记不会解析。下面Markdown里面的选项其实也挺有用的,它可以控制解析markdown中的哪些标记,我们只用了最简单了,都不选即可。 <br>
<img src="https://lh5.googleusercontent.com/-2-SBjrIGK3w/Uw7cq-_03RI/AAAAAAAAAEk/XJSM4iDtO0w/w840-h642-no/txt%25E8%25BE%2593%25E5%2585%25A5.jpg" alt="enter image description here" title=""></p>
<p><strong>7.MOBI输出</strong></p>
<p><img src="https://lh4.googleusercontent.com/-iku2oAksTio/Uw7cmLyonkI/AAAAAAAAAEU/gR5CMstRevc/w846-h642-no/mobi%25E8%25BE%2593%25E5%2587%25BA.jpg" alt="enter image description here" title=""></p>
<p>也挺重要,有几个地方注意一下。 <br>
1. 目录标题可以自由设置 <br>
2. 勾选”在生成的书籍开始处插入目录,而不是放在末尾“ <br>
3. <strong>勾选”通过Facebook分享图形目录等信息“</strong>,calibre是把元数据和封面以单独的文件保存的,如果没勾选,封面和元书籍不会集成到mobi文件里面,这样你如果把mobi分享给别人的话,别人在设备上是不会显示”作者“和”封面”的。 <br>
<strong>8.调试</strong></p>
<p>这一步也挺有用,设置一个目录,可以calibre每一个转换过程的结果。结果是html格式的,可以验证markdown标记是否被正确解析,css样式是否生效。</p>
<h2 id="5导出mobi书籍">5.导出mobi书籍</h2>
<p>转换成mobi以后,把书籍保存到磁盘上。然后可以发送到设备或者把mobi共享给朋友。Enjoy it!</p>
<h1 id="总结">总结</h1>
<p>写到这,基本上解决了这样一个问题:当你要看的书没有mobi版的话,自己怎么做一个?</p>
<p>有很多思路。我介绍了一种使用Calibre软件制作的方法,当然还有其他的办法。难点在于排版,水很深,有兴趣的参考上文给出的资料深入研究。</p>
<p>希望本文可以帮助到你,如果你觉得问题没解决,sigh…….那再推荐网上几篇比较好的博文吧: <br>
<a href="http://wenku.baidu.com/link?url=GSXRck47ZJDIxBXCRtGfGYfIgFLUUwIl94RvzuV3m0kL5eJ0bMz_iIQ-oz4qBlc2JAt9_Z9ca3tC_xBAr4wIwxngsrpUXu1qGvS2VFapk3S">calibre电子书制作教程</a>,<a href="http://www.freemindworld.com/blog/2010/101022_calibre_tips_and_faq.shtml">calibre使用技巧与常见问题</a></p>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment