做人要厚道:http://blog.sina.com.cn/s/blog_6441e0640100gmj9.html
现在要讲到epub一个重要的文件NCX(Navigation Control file for XML applications)
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
</ncx>
<head>
标记中包含四个 meta
元素:
uid
: 数字图书的惟一 ID。该元素应该和 OPF 文件中的dc:identifier
对应。depth
:反映目录表中层次的深度。该例只有一层,因此是 1。totalPageCount
和maxPageNumber
:仅用于纸质图书,保留 0 即可。
的内容是图书的标题,和 OPF 中的 dc:title
匹配。
是 NCX 文件中最重要的部分,定义了图书的目录。navMap
包含一个或多个 navPoint
元素。每个 navPoint
都要包含下列元素:
playOrder
属性,说明文档的阅读顺序。和 OPF spine 中itemref
元素的顺序相同。navLabel/text
元素,给出该章节的标题。通常是章的标题或者数字,如 “第一章”,或者 — 像这个例子一样 — “封面”。content
元素,它的src
属性指向包含这些内容的物理资源。就是 OPF manifest 中声明的文件(也可使用片段标识符引用 XHTML 内容中的锚元素 — 比如content.html#footnote1
)。- 还可以有一个或多个
navPoint
元素。NCX 使用嵌套的导航点表示层次结构的文档。
navPoint
元素,它们的 playOrder
值按升序排列,从 1 开始。在 NCX 中可以命名这些章节,以便读者跳到电子图书不同的部分。
***NCX 和 OPF 元数据的交叉
***NCX 和 OPF spine 有什么不同?
navPoint
元素通常比 OPF spine 中的 itemref
元素多。实际上,spine 中的所有项都会出现在 NCX 中,但 NCX 可能更详细。
现在知道了 EPUB 需要的所有元数据,可以加入真正的图书内容了。可以使用 下载 的内容,也可以自己写,只要文件名和元数据匹配即可。
然后创建下列文件和文件夹:
- title.html:图书的标题页。创建该文件并在其中包含引用封面图片的
img
元素,src
的属性值为images/cover.png
。 - images:在 OEBPS 下创建该文件夹,然后复制给定的示例图片(或者创建自己的图片)并命名为cover.png。
- content.html:图书的实际文字内容。
- stylesheet.css:将该文件放在和 XHTML 文件相同的 OEBPS 目录中。该文件可以包含任意 CSS 声明,比如设置字体或者文字颜色。
EPUB 规范的 OEBPS Container Format 讨论了 EPUB 和 ZIP,最重要的几点是:
- 档案中的第一个文件必须是 mimetype 文件(参见本教程 Mimetype 一节)。mimetype 文件不能被压缩。这样非 ZIP 工具就能从 EPUB 包的第 30 个字节开始读取原始字节,从而发现 mimetype。
- ZIP 档案不能加密。EPUB 支持加密,但不是在 ZIP 文件这一层上。
$ zip -0Xq my-book.epub mimetype $ zip -Xr9Dq my-book.epub * |
-X
和 -D
最大限度地减少 .zip 文件中无关紧要的信息;-r
递归地包含 META-INF 和 OEBPS 目录的内容。
最后还是要检查验证一下生成的epub文件。
在命令行中运行非常简单:
$ java -jar /path/to/epubcheck.jar my-book.epub
根据错误的情况会提示出错误的信息,可以根据信息进行修改。