我正在try 开发一个iPhone应用程序来读取ePub文件.有没有可用的框架来开发这一点?我不知道如何阅读这种文件格式.我试图使用NSXML Parser解析扩展名为.epub的示例文件,但失败了.

推荐答案

EPUB格式汇集了一系列不同的规范/格式:

  • 一个用来说明书的内容应该是什么样子(XHTML1.1+CSS的子集)
  • 一个用于定义" list ",该 list 列出组成该内容的所有文件(OPF,它是一个XML文件)
  • 一个是定义如何打包所有内容(OEBPS: list 中所有内容的zip文件加上几个额外文件)

规范看起来有点令人望而生畏,但实际上,一旦掌握了基础知识(解压缩、解析XML),就不会特别困难或复杂.

您需要了解如何下载EPUB,将其解压缩到某个位置,解析 list ,然后显示相关内容.

如果你刚刚开始,有一些建议:

要显示内容,目前只需使用UIWebView即可.

下面是您的代码的高级逐步介绍:

1)创建带有UIWebView的视图

2)下载EPUB文件

3)使用上面链接的zip库将其解压缩到应用程序的Documents文件夹中的子目录

4)使用上面链接的TBXML在META-INF/container.xml处解析XML文件(如果该文件不存在,则EPUB无效

5)在该XML中,找到媒体类型为application/oebps-package+xml的第一个"根文件".这是本书的OPF文件.

6) 解析OPF文件(也是XML)

7)现在你需要知道这本书的第一章是什么.

a)<manifest>元素中的每个<item>具有ID和HREF.将这些存储在AN NSDictionary中,其中密钥是ID,对象是HREF.

b)看看<spine>名中的前<itemref>名.它具有与(A)中的一个ID相对应的idref属性.查一下NSDictionary的身份证,你就会得到一张HREF.

c)这是向用户展示的第一章的文件.计算出完整路径(提示:您将zip文件解压缩到的位置(3)加上(6)中OPF文件的基目录)

8) 使用fileURLWithPath:创建一个NSURL,其中路径是(7c)的完整路径.使用(1)中创建的UIWebView加载此请求.

您需要实现前进/后退按钮或滑动或其他功能,以便用户可以从一个章节移动到另一个章节.使用<spine>确定下一步显示哪个文件-XML中的<itemrefs>是按照读者应该看到的顺序显示的.

Ios相关问答推荐

[NSJSONSerializationdataWithJSONObserver:选项:错误:]:SON写入中无效的顶级类型

无法在fastlane和github操作中从react-native 应用程序构建ios

SWIFT中具有可选返回类型和泛型的网络请求

如何创建自定义组件来接受(和传递)所有可能的Textfield参数?

如何使视图完全适合屏幕,而不会在旋转时溢出手机屏幕的边界?

阿拉伯文变音符号(Harakat)在文本对齐的UILabel中未对齐

SwiftUI:.toolbar 不适用于 UITextView

如何从单独的视图更改修饰符的值

SwiftUI:同时拖动父视图和子视图,但手指分开

SwiftUI withAnimation 在视图出现之前不会启动

迁移到 UIKit 生命周期的应用程序不会调用 SceneDelegate

滑动以返回特定的 SwiftUI 视图

按钮在 SwiftUI 中没有采用给定的高度和宽度

关闭所有打开的视图控制器的单个函数

使用未知类型创建图像格式是一个错误与 UIImagePickerController

iOS:以编程方式制作屏幕截图的最快、最高效的方法是什么?

自动布局:是什么创建了名为 UIView-Encapsulated-Layout-Width & Height 的约束?

iOS SDK - 以编程方式生成 PDF 文件

UIView - 加载视图时如何获得通知?

找不到开发者磁盘映像