我想为 iOS 平台实现一个 ePub 阅读器。请建议任何用于翻书动画、书签、字体大小自定义和单页视图(无滚动条)的开源代码。
4 回答
正如上一篇文章所指出的,没有任何 API 可以让 ePub 显示它——你需要做一些工作:
- 解压 ePub
- 读取清单文件和元数据文件以找到要显示的 xhtml 文档
- 使用解压缩文档的 file:/// URL 将 xhtml 文档加载到 UIWebView
如果您想确保文档不会访问网络,您需要实现自定义 NSURLProtocol 并自己为文件提供字节,因为 file:/// 允许跨域访问。
这将很好地显示内容,但“困难”部分正在文档之间移动(通常代表一整章)。这是 iBooks 和其他应用程序为您完成的工作。
注意:要让 UIWebView 正确显示内容,您必须确保在使用 file:/// url 时文件具有 .xhtml 扩展名。如果您实现自己的 URL 协议处理程序,则需要确保协议处理程序为 xhtml 返回正确的 xml 内容类型,即:
应用程序/xhtml+xml
使用 ePub 打包格式和开源阅读器作为参考:
将 UITextView 与 pageview 控制器一起使用。(如果有任何疑问,请说明您的疑问)
试试这个步骤:
源代码: AePubReader
执行:
步骤 1:创建一个视图UIWebView
第 2 步:下载EPUB文件并导入到您的项目中
第 3 步:将EPUB文件解压缩到应用程序文档文件夹中的子目录。
第 4 步:解析XML
目录中的文件META-INF/container.xml
。如果此文件目录不存在意味着您的 EPUB 文件无效。
第5步:在这个XML
中,找到第一个rootfile
带有媒体类型的“” application/oebps-package+xml
。这是本书的 OPF 文件。
第 6 步:解析 OPF 文件(也是 XML)
第7步:现在你需要知道这本书的第一章是什么。
- 元素中的每个元素都有一个 id 和一个 href。将这些存储在
NSDictionary
其中键是 id 而对象是 href 的地方。 - 看第一个中的。它有一个 idref 属性,对应于(步骤 7a)中的一个 id。在 中查找该 ID,
NSDictionary
您将获得一个 href。 - 这是向用户展示的第一章的文件。找出完整路径是什么(提示:它是您将 zip 文件解压缩到的位置(步骤 3),加上
NSDictionary
OPF 文件的基础(步骤 6)。
第 8 步:NSURL
使用 fileURLWithPath :创建一个,其中路径是来自(第 7c 步)的完整路径。使用您在(步骤 1)中创建的 UIWebView 加载此请求。
第 9 步:您需要实现forward / backward
按钮或swipes
其他东西,以便用户可以从一章移动到另一章。使用 确定接下来要显示的文件。然后XML
按照它们应该出现在读者面前的顺序排列。
这些步骤是从此链接引用的