阅读ePub格式

时间:2009-09-07 09:37:59

标签: ios iphone epub

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

6 个答案:

答案 0 :(得分:300)

EPUB格式汇集了许多不同的规格/格式:

  • 一个说明书的内容应该是什么样的(XHTML 1.1 + CSS的一个子集)
  • 一个定义“清单”,列出构成该内容的所有文件(OPF,即XML文件)
  • 一个用于定义所有内容的打包方式(OEBPS:清单中所有内容的zip文件以及一些额外文件)

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

您需要了解如何下载EPUB,将其解压缩到某处,解析清单然后显示相关内容。

如果您刚刚开始,请注意以下几点:

要显示内容,请立即使用UIWebView

以下是您的代码的高级步骤:

1)使用UIWebView

创建视图

2)下载EPUB文件

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

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

5)在此XML中,找到第一个带有媒体类型application/oebps-package+xml的“根文件”。这是本书的OPF文件。

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

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

a)<item>元素中的每个<manifest>都有一个id和一个href。将它们存储在NSDictionary中,其中键是id,对象是href。

b)查看<itemref>中的第一个<spine>。它有一个idref属性,对应于(a)中的一个id。在NSDictionary中查找该ID,您将获得一个href。

c)这是显示用户的第一章的文件。弄清楚完整路径是什么(提示:它是将zip文件解压缩到(3)中的位置加上(6)中OPF文件的基本目录)

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

您需要实现前进/后退按钮或滑动等,以便用户可以从一个章节移动到另一个章节。使用<spine>计算下一个要显示的文件 - XML中的<itemrefs>按照它们应向读者显示的顺序显示。

答案 1 :(得分:21)

显然,EPUB“只是”一种XML格式,所以如果你有一个xml解析器和the spec它应该没问题。

a little tuto?玩得开心!

编辑:您还可以阅读一些代码here,这是用于生成epub,而不是读取它们,但代码可能很有用。

再次编辑:在右侧边栏中看到相关问题的链接,支持ePub的免费电子书阅读器的答案中有一些链接。


编辑3:您应该在编辑问题时添加评论,以便回答您的​​人可以继续讨论(如果您不评论我们没有注意到您的编辑)。

因此,解析失败是因为您没有阅读Stack Overflow上的规范或相关问题... * .epub文件是一个包含XML文件的压缩文件夹,而不是普通的xml。

答案 2 :(得分:6)

我读过这个教程一次(需要免费注册,对不起),它给了我一个很好的ePub介绍。 deverloperWorks tutorial here

我强烈建议您查看一些XML处理库。如果您只想从XML文件中获取特定信息,那么您可以选择正确的解析策略。

答案 3 :(得分:3)

有一个开源项目fbreader,

它也支持iphone

http://www.fbreader.org/about.php

答案 4 :(得分:2)

我正在玩arround为iphone应用程序创建一个epub框架。

目前(我真的刚刚开始)我可以生成一个标题页,其中包含指向章节的链接。

我的方法是

  • 使用quickconnect iphone框架作为 一层(也许我改成了phonegap) 这基本上允许javascript 应用程序作为iPhone应用程序
  • 将UNZIPed epub作为资源添加到项目中
  • 使用自定义版本的epub.js解析整个内容(在Google代码的某个地方)

现在我正在研究pageflip,某种gui和轻微的可用性问题(保存当前页面被查看)

我希望让你知道如何开始

答案 5 :(得分:1)

Jonathan Wight(schwa)开发了一种ObjC解决方案,用于在iPhone上解析和显示ePub文档。它是TouchCode开源存储库的一部分。