自制 Kindle 电子书的小伙伴们,还在用 Word、Page、inDesign 导出制作电子书?那就太 OUT 了,用这类软件生成的页面源代码较为冗余杂乱,影响电子书的质量,也不符合亚马逊指定的规范标准,这对于追求完美的小伙伴来说是不能忍受的。
本文是翻译自国外网友的一片文章,结合亚马逊的 Amazon Kindle Publishing Guidelines 介绍了一下 Kindle 电子书(KF8格式)的制作流程,比较适用于有 HTML 和 CSS 基础的小伙伴。没有基础的小伙伴也可以通过修改文中提供的模板轻松自制电子书。
本文由 Kindle 伴侣翻译,转载请注明出处。文末附原文链接,如发现翻译谬误请不吝指正!
制作 Kindle 电子书的方法有很多,相比于去依赖插件,用 KindleGen 把自己编写的源文件转换成 Kindle Format 8(KF8)格式,能够让你更精确的控制最终生成的结果。
如果你和我一样是名 WEB 设计师,已经掌握了 HTML、XML 以及 CSS,这些从零开始徒手制作 Kindle 电子书所必备的技术。那你所需要了解的就是如何将它们综合起来运用,这样就可以完成电子书制作啦。
一、需要准备的工具
Text editor:很多文本编辑器能够胜任此工作,但是当我编辑特别长的内容(上千页)时,经常遇到编辑器崩溃的情况。我通常更喜欢使用 BBEdit 编辑电子书,但 TextWrangler 应该也能满足你的需求。
摘自 Kindle Publishing Program page
- Amazon Kindle Publishing Guidelines:此 PDF 文档是亚马逊制定的制作电子书标准大纲。
- KindleGen:一个命令行工具,能把源文件转换成 Kindle Format 8 格式的电子书。
- Kindle Previewer:模拟预览工具,可以用它来测试你制作的电子书。
- Sample Books:强烈建议看看这些包含如何添加图片、文本、媒体文件等实例的样书。
本教程将包含一本简单电子书制作所需要的基础知识(其实也只是针对亚马逊 publishing guidelines 的学习而已),还有一些样例供参考制作更多复杂的电子式。
二、需要准备的文件
制作一本 Kindle 电子书,你需要先准备以下文件:
- HTML 格式的电子书源文件(可以是一个文件,也可以是分开的多个文件,比如每章节一个文件)
- 一个包含电子书详细信息的 OPF 文档(Open Packaging Format)
- 一个电子书目录文档 NCX(Navigation Center eXtended)。
- JPEG 或 TIFF 格式的封面图像。
- 电子书可能需要的其他一些文件(如 CSS 文件、图片文件、字体文件等)
如果你下载了sample books,就能看到它们的这些文件是如何组织起来的。
三、格式化电子书内容:HTML
这一步很耗时,但是所有你需要做的就是把这些内容制作成网页。你可以使用 XHTML 或者 HTML,但必须加以小心的是,设置编码时要使用“Latin-1”(ISO-8859-1)(译者注:中文建议使用 UTF-8 编码)。这里有个模板,可以用来参照你生成的 HTML 文件:
<!doctype html>
<html lang="en">
<head>
<meta charset="iso-8859-1" />
<title>Your Book Title</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<!-- Your book goes here -->
</body>
</html>
你可以从 inDesign(或者 Word,呵呵……)导出 HTML 文档。如果你像我一样,那么,你会被那些转换来看起来乱七八糟的代码吓哭,你会想去清理它们。我强烈建议你去熟悉下 Grep (译者注:缩写来自Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来)来完成这项工作。
当用 HTML 组织电子书内容时,要保持代码的简洁和结构化。使用 HTML 设置标题、段落、引用、列表、加粗或者斜体等。具体你可以参考 publishing guidelines 中第 71 页中全部可用的标签列表。
为电子书章节部分所编写的 HTML 代码,看起来应该像下面的这个简略版本一样(注意章节标题的 ID 以及结尾名为“pagebreak”的 Class 选择器,下面我会解释那是做什么用的):
<h2 id="ch2">Chapter Two</h2>
<div class="center"><br><img src="images/ornament.png" width="75" alt="----------"></div>
<h3>Subtitle</h3>
<blockquote>
<p>Some quote</p>
</blockquote>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<div class="center">* * *</div>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<p>Lorem ipsum dolor sit amet, consectetur ... </p>
<div class="pagebreak"></div>
正如你所看到的,你可以给 Div 标签添加 Class 选择器,甚至图片(详情查阅 publishing guidelines 的相关介绍)。只要记住你没法控制读者使用的阅读设备尺寸,以及基础字体。想象你自己是读者!
四、格式化电子书内容:CSS
除非你要制作一个纯图片的电子书、儿童读物或者漫画书,否则你的 CSS 代码将会非常简单。记住 Kindle 用户能够设置他们想要的字体和字体大小,所以你不能对此有太多的干预。
p { margin-top: 1em; text-indent: 0em; }
h1 {margin-top: 1em}
h2 {margin: 2em 0 1em; text-align: center; font-size: 2.5em;}
h3 {margin: 0 0 2em; font-weight: normal; text-align:center; font-size: 1.5em; font-style: italic;}
.center { text-align: center; }
.pagebreak { page-break-before: always; }
注意怎样用 em 单位设置 margin、padding 以及 font-size。这样,间距将会根据读者所选择的字体大小进行相应的调整。
如果想要设置分页符,你可以使用 CSS 属性:page-break-before 或 page-break-after。或者,你也可以使用 Kindle 的私有标签:<mbp:pagebreak />
。我通常在每一个章节的结尾处放置一个。
请查阅 publishing guidelines 第 75 页中的 CSS 支持列表。
五、电子书目录页:HTML
在电子书的开头,需要有一个目录(TOC)。这是一个简单的链接列表,用来跳转到书中的不同章节。这就是为什么你需要为每个章节标题设置 ID 的原因。
我个人喜欢把 HTML 格式的 TOC 文档制成下面这样的列表形式:
<div id="toc">
<h2>
Table of Contents <br />
<img src="images/ornament.png" width="75" alt="----------" />
</h2>
<ul>
<li><a href="#over">Overture</a></li>
<li><a href="#pro">Prologue</a></li>
<li><a href="#ch1">Chapter 1</a></li>
<li><a href="#ch2">Chapter 2</a></li>
<li><a href="#ch3">Chapter 3</a></li>
<li><a href="#ch4">Chapter 4</a></li>
<li><a href="#ch5">Chapter 5</a></li>
<li><a href="#ch6">Chapter 6</a></li>
<li><a href="#ch7">Chapter 7</a></li>
<li><a href="#ch8">Chapter 8</a></li>
<li><a href="#epi">Epilogue</a></li>
</ul>
</div>
<div class="pagebreak"></div>
如果你把 HTML 文档分成多个文件,确保链接准确地指向相应的文件和 ID。比如:
<a href="chapter2.html#ch2">Chapter 2</a>
六、电子书目录导航:NCX
除了在 HTML 文件里包含目录列表外,你还需要制作一个和目录有着相同信息的 XML 文件,这个 XML 文件能够带来更好的阅读体验,因为它能引导读者更好地浏览这本书。(译者注:TOC 是能在电子书里看到的目录页,NCX 是指点击“前往”显示的那个目录导航)
如果你下载了 sample books,你能看到每本书都包含一个这样的文件。但这里摘选的 NCX 目录内容来自我们上面介绍的 HTML TOC 示例:
<?xml version="1.0"?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
<head>
</head>
<docTitle>
<text>Book title</text>
</docTitle>
<navMap>
<navPoint id="toc" playOrder="1">
<navLabel>
<text>
Table of Contents
</text>
</navLabel>
<content src="index.html#toc" />
</navPoint>
<navPoint id="over" playOrder="2">
<navLabel>
<text>
Overture
</text>
</navLabel>
<content src="index.html#over" />
</navPoint>
<navPoint id="pro" playOrder="3">
<navLabel>
<text>
Prologue
</text>
</navLabel>
<content src="index.html#pro" />
</navPoint>
<navPoint id="ch1" playOrder="4">
<navLabel>
<text>
Chapter 1
</text>
</navLabel>
<content src="index.html#ch1" />
</navPoint>
<navPoint id="ch2" playOrder="5">
<navLabel>
<text>
Chapter 2
</text>
</navLabel>
<content src="index.html#ch2" />
</navPoint>
...
</navMap>
</ncx>
代码看起来挺吓人的,但是如果你稍加注意,它不过是一个 navPoint 标签组成的列表。每一组标签都包含章节名称、位置(src)和 playOrder(用以标记章节出现的先后顺序)的信息。
我建议在 sample books 中随意找一个 NCX 文件,并根据电子书内容修改后使用。只需要注意保持链接的准确以及显示顺序。
七、电子书详情: OPF
OPF 是一个包含所有和电子书信息相关的 XML 文件,如 ISBN、标题、作者、封面,以及内含的文件列表。
和 NCX 文件一样,我建议使用 sample book 中的一个 OPF 文件作为模板:
<?xml version="1.0" encoding="iso-8859-1"?>
<package unique-identifier="uid" xmlns:opf="http://www.idpf.org/2007/opf" xmlns:asd="http://www.idpf.org/asdfaf">
<metadata>
<dc-metadata xmlns:dc="http://purl.org/metadata/dublin_core" xmlns:oebpackage="http://openebook.org/namespaces/oeb-package/1.0/">
<dc:Title>Book title</dc:Title>
<dc:Language>en</dc:Language>
<dc:Creator>Author name</dc:Creator>
<dc:Copyrights>Copyright owner</dc:Copyrights>
<dc:Publisher>Publisher</dc:Publisher>
<x-metadata>
<EmbeddedCover>images/cover.jpg</EmbeddedCover>
</x-metadata>
</dc-metadata>
</metadata>
<manifest>
<item id="content" media-type="text/x-oeb1-document" href="index.html#toc"></item>
<item id="ncx" media-type="application/x-dtbncx+xml" href="toc.ncx"/>
<item id="text" media-type="text/x-oeb1-document" href="index.html#over"></item>
<item id="Images" media-type="text/x-oeb1-document" href="Images.html"></item>
<item id="background" media-type="text/x-oeb1-document" href="background.html"></item>
</manifest>
<spine toc="ncx">
<itemref idref="content"/>
<itemref idref="text"/>
<itemref idref="Images"/>
<itemref idref="background"/>
</spine>
<guide>
<reference type="toc" title="Table of Contents" href="toc.html"/>
<reference type="text" title="Book" href="index.html"/>
</guide>
</package>
有一些 book samples 的 OPF 文件含有详细的注释,但是上面这个 OPF 示例应该能让你对其所包含的信息有一个大概了解:
- Metadata:一些如书名、作者、出版社和装帧之类的信息。在 OPF 网站上有一个很全的 Metadata 列表供你引用。
- Manifest:包含所有文件的列表(如 HTML 和 NCX 文件)。我建议最好也列出所有的 CSS 和 图片文件,这样生成 Kindle 电子书时,任何不存在的文件(或拼写错误的文件)都会出现警告提示。
- Spine:HTML 文件列表,按照它们被阅读的先后顺序排列。
- Guide:这个元素指向你书中的关键项,比如 TOC(目录),以及在有致辞的情况下,正文的开始位置,等等。
八、封面图片
就像你在 OPF 文件里能够看到的,你需要包含封面图片的相关信息。图片规格如下:
- JPEG 或 TIFF 格式
- 优先使用 1.6:1 的长宽比
- 最小尺寸:宽 625 像素,长 1000 像素
- 最佳尺寸:宽 1563 像素,长 2500 像素
九、生成 Kindle 电子书
现在你准备好了所有用来创建 mobi 格式电子书的必要文件。这时就轮到 KindleGen 上场了。
在下载完适用于你系统的 downloand KindleGen 后,你需要用命令行运行它。下载到的 KindleGen 包含使用说明,不过命令看起来像下面这样:
$ /Applications/kindlegen /Users/me/Documents/Book/book.opf #如果路径中有空格请用双引号包起来
如果你用的是 Mac 系统,最简单的方法是打开 Terminal(终端),把 KindleGen 拖放到终端窗口上,再把 OPF 文件拖放到终端窗口上,然后按一下键盘上的 Enter(回车)。KindleGen 就会开始运行了,不出意外的话,在 OPF 所在目录下就会生成一个 mobi 文件。(译者注:其实 Windows 系统中的命令提示符也可以这样干)
你可能会遇到一些不可预知的错误,这可能和 TOC 文件中的错误链接(通常是 ID 或链接的拼写错误)以及缺失的文件(可能是名称的拼写错误)有关。
十、首战告捷!
一旦你有了 mobi 格式的电子书,就可以用 Kindle Preview,任何电子书阅读器,甚至真正的 Kindle 设备直接打开它。
如果你对制作结果很满意,可以把它上传到 Kindle Store!(译者注:这里是指美国亚马逊。)
———————————
译者注:经过测试,用本文方法制作的电子书,通过邮件附件的方式推送到亚马逊云端,会出现不显示封面的问题。查找了很多资料,也没有找到解决方法,猜测原因可能是 KindleGen 的一个 Bug 引起的。因为通过 mobi 拆分工具拆分后,发现会生成 mobi7 和 mobi8 两个文件夹,在 mobi7 文件夹内能找到封面图片,但是 mobi8 文件夹内却无法找到,可能就是这个原因引起的,但目前还没找到确切的原因。如果你有解决方法请一定留言告知,谢谢!
———————————
原文:www.aliciaramirez.com
翻译:Sherry, Runbing
翻译水平有限,如有错误请及时指正,谢谢。