epub图书
在你开始前
本教程将指导您创建EPUB格式的电子书。 EPUB是一种基于XML的,对开发人员友好的格式,它已成为数字图书的事实上的标准。 但是EPUB不仅适合书籍:有了它,您可以:
- 捆绑文档以供离线阅读或轻松分发
- 打包博客文章或其他Web本地内容
- 使用常见的开源工具进行构建,搜索和重新混合
关于本教程
您可以通过手动生成EPUB书籍来开始本教程,以帮助您学习所有组件和所需的文件。 接下来,该教程显示了如何捆绑完成的数字书并根据规范对其进行验证,以及如何在各种阅读系统中对其进行测试。
然后,它涵盖了从DocBook XML(技术文档使用最广泛的标准之一)生成EPUB的方法,以及如何使用Python从头到尾完全自动化DocBook的EPUB创建。
目标
在本教程中,您:
- 了解什么是EPUB,它的背后是谁,以及谁在采用它
- 探索EPUB捆绑包的结构,包括其所需的文件及其架构
- 使用简单的内容从头开始创建有效的EPUB文件
- 使用开源工具从DocBook(用于技术文档和书籍的广泛使用的架构)生成EPUB文件
- 使用Python和DocBook自动执行EPUB转换
先决条件
尽管您应该熟悉创建文件和目录的机制,但是本教程假定没有特定的操作系统。 强烈建议使用XML编辑器或集成开发环境(IDE)。
对于本教程有关自动创建EPUB的后续部分,本教程假定您了解一种或多种基本XML处理技能(基于XSLT,DOM或SAX的解析),以及如何使用XML原生API构造XML文档。
完成本教程无需熟悉EPUB文件格式。
系统要求
要完成本教程中的示例,您需要一个Java解释器(1.5或更高版本)和一个Python解释器(2.4或更高版本),以及各自的必需XML库。 但是,经验丰富的XML开发人员应该能够使示例适用于具有XML库的任何编程语言。
关于EPUB格式
了解EPUB的背景,最常使用的EPUB,以及EPUB与可移植文档格式(PDF)有何不同。
什么是EPUB?
EPUB是由国际数字出版论坛(IDPF)(用于数字出版行业的贸易和标准协会)标准化的可重用数字书籍和出版物的XML格式。 IDPF于2007年10月正式采用了EPUB,到2008年,主要发行商Swift采用了EPUB。 您可以在所有主要操作系统,Sony PRS等电子墨水设备以及Apple iPhone等小型设备上使用各种开源软件和商业软件来读取EPUB格式。
谁在生产EPUB? 仅书籍吗?
尽管传统印刷出版商最先采用EPUB,但格式上没有任何限制将其用于电子书。 使用免费提供的软件工具,您可以将网页作为EPUB捆绑,转换纯文本文件或将现有DocBook XML文档转换为格式正确且有效的EPUB。 (我将在“ 从DocBook到EPUB”中介绍后者。)
EPUB与PDF有何不同?
PDF仍然是世界上使用最广泛的电子文档格式。 从书籍出版商的角度来看,PDF具有以下优点:
- PDF文件允许对布局进行完美的像素控制,包括复杂的易于打印的布局,例如多列和备用的正/反样式。
- PDF可以通过多种基于GUI的文档工具生成,例如Microsoft®Office Word或Adobe®InDesign®。
- PDF阅读器无处不在,并已安装在大多数现代计算机上。
- 可以将特定字体嵌入PDF中,以精确控制最终输出。
从软件开发人员的角度来看,PDF与理想情况相去甚远:
- 这不是学习的标准。 因此,将您自己的PDF生成代码放在一起并不是一件容易的事。
- 尽管PDF现在是国际标准化组织(ISO)标准(ISO 32000-1:2008),但传统上它是由一家公司控制的:Adobe Systems。
- 尽管PDF库可用于大多数编程语言,但许多库是商业的或嵌入在GUI应用程序中,并且不易受外部过程控制。 并非所有免费库都继续得到积极维护。
- 可以通过编程方式提取和搜索PDF原生文本,但是很少有PDF带有标签,因此转换为Web友好格式既简单又可靠。
- PDF文档不易回流 ,这意味着它们无法很好地适应小屏幕或布局的根本变化。
为什么EPUB对开发人员友好
EPUB解决了PDF中与开发人员友好相关的所有缺陷。 EPUB是一个简单的ZIP格式文件(扩展名为.epub ),其中包含以禁止方式排序的文件。 关于ZIP归档的准备方式,存在一些棘手的要求,稍后将在将EPUB文件打包为ZIP归档中进行详细讨论。 否则,EPUB很简单:
- EPUB中几乎所有内容都是XML。 可以使用标准XML工具包来构建EPUB文件,而无需任何特殊或专有软件。
- EPUB内容(电子书的实际文本)几乎始终是XHTML 1.1版。 (另一种格式是DTBook的,用于编码的书籍为视障。见标准相关主题有关DTBook的更多信息,这是不包括在本教程)。
- 大多数EPUB XML模式均取自可免费获得的现有已发布规范。
两个关键点是EPUB元数据是XML , EPUB内容是XHTML 。 如果您的文档构建系统生成Web的输出和/或基于XML,那么它也非常接近能够生成EPUB。
建立您的第一个EPUB
最低限度的EPUB捆绑包包含几个必需的文件。 该规范对于EPUB档案中这些文件的格式,内容和位置可能非常严格。 本部分说明使用EPUB标准时必须了解的内容。
EPUB束的解剖
最小EPUB文件的基本结构遵循清单1中的模式。 准备分发时,此目录结构会捆绑在一起成为ZIP格式的文件,在将EPUB文件作为ZIP归档捆绑在一起时,有一些特殊要求。
清单1.一个简单的EPUB档案的目录和文件布局
mimetype
META-INF/
container.xml
OEBPS/
content.opf
title.html
content.html
stylesheet.css
toc.ncx
images/
cover.png
注意:可以从Downloadable resources中获得遵循此模式的样本书,但是我建议您按照教程来创建自己的书。
要开始构建您的EPUB图书,请为EPUB项目创建目录。 打开文本编辑器或IDE(例如Eclipse)。 我建议使用具有XML模式,特别是一个可以验证对编辑的RELAX NG模式中列出的相关主题 。
模仿文件
这很简单:mimetype文件是必需的,并且必须命名为mimetype。 该文件的内容始终为:
application/epub+zip
请注意,mimetype文件不能包含任何换行符或回车符。
此外,mimetype文件必须是ZIP存档中的第一个文件,并且本身不能被压缩。 您将在将EPUB文件作为ZIP归档文件打包时看到如何使用常见的ZIP参数包含它。 现在,只需创建此文件并保存,并确保它位于您的EPUB项目的根目录下即可。
META-INF / container.xml
在EPUB的根级别,必须有一个META-INF目录,并且必须包含一个名为container.xml的文件。 EPUB阅读系统将首先查找此文件,因为它指向数字图书的元数据的位置。
创建一个名为META-INF的目录。 在其中打开一个名为container.xml的新文件进行写入。 容器文件很小,但是其结构要求很严格。 将清单2中的代码粘贴到META-INF / container.xml中。
清单2.示例container.xml文件
<?xml version="1.0"?>