我正在尝试开发一个 iPhone 应用程序来读取 ePub 文件。有没有框架可以用来开发这个?我不知道如何阅读这种文件格式。我尝试使用 NSXML 解析器解析扩展名为 .epub 的示例文件,但失败了。
最佳答案
EPUB 格式汇集了一系列不同的规范/格式:
- 说明这本书的内容应该是什么样的(XHTML 1.1 + CSS 的子集)
- 定义一个“ list ”,列出构成该内容的所有文件(OPF,这是一个 XML 文件)
- 定义所有内容的打包方式(OEBPS: list 中所有内容的 zip 文件以及一些额外文件)
规范看起来有点令人生畏,但实际上一旦掌握了基础知识(解压缩、解析 XML),它就不是特别困难或复杂。
您需要了解如何下载 EPUB、将其解压缩到某处、解析 list 然后显示相关内容。
如果你刚刚开始,一些建议:
要显示内容,只需使用 UIWebView
现在。
下面是您的代码的高级逐步说明:
1) 创建一个带有 UIWebView
的 View
2) 下载EPUB文件
3) 使用上面链接的 zip 库将其解压缩到应用文档文件夹中的子目录
4) 在 META-INF/container.xml
解析 XML 文件(如果此文件不存在,则 EPUB 无效)使用上面链接的 TBXML
5) 在此 XML 中,找到媒体类型为 application/oebps-package+xml
的第一个“rootfile” .这是本书的 OPF 文件。
6)解析OPF文件(也是XML)
7) 现在你需要知道这本书的第一章是什么。
a) 每个 <item>
在<manifest>
元素有一个 id 和一个 href。将这些存储在 NSDictionary
中其中键是 id,对象是 href。
b) 看第一个<itemref>
在<spine>
.它有一个 idref 属性,对应于 (a) 中的一个 id。在 NSDictionary
中查找该 ID你会得到一个 href。
c) 这是第一章给用户看的文件。找出完整路径是什么(提示:它是您在 (3) 中将 zip 文件解压缩到的位置加上 (6) 中 OPF 文件的基本目录)
8) 创建一个 NSURL
使用 fileURLWithPath:
,其中路径是 (7c) 的完整路径。使用 UIWebView
加载此请求您在 (1) 中创建的。
您需要实现前进/后退按钮或滑动等,以便用户可以从一章移动到另一章。使用 <spine>
找出下一个要显示的文件 - <itemrefs>
XML 中的顺序是它们应向读者显示的顺序。
关于ios - 阅读 ePub 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1388467/