读取ePub格式


102

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

Answers:


304

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

  • 一个人说这本书的内容应该是什么样(XHTML 1.1 + CSS的子集)
  • 定义一个“清单”,列出包含该内容的所有文件(OPF,这是一个XML文件)
  • 一个定义所有内容打包方式的文件(OEBPS:清单中所有内容的zip文件以及一些其他文件)

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

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

如果您刚刚起步,请注意以下几点:

要显示内容,请暂时使用UIWebView

这是您的代码的逐步介绍:

1)使用 UIWebView

2)下载EPUB文件

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

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

5)在此XML中,找到第一个具有media-type的“ rootfile” application/oebps-package+xml。这是这本书的OPF文件。

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

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

一个),每个<item><manifest>元件具有ID和一个href。将它们存储在NSDictionary键为id且对象为href的位置。

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

c)这是第一章显示给用户的文件。计算出完整路径是什么(提示:在(3)中解压缩zip文件以及在(6)中将OPF文件的基本目录解压缩到的位置)

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

您需要实现前进/后退按钮或滑动或其他操作,以便用户可以从一个章节移动到另一章节。使用确定<spine>下一个要显示的文件<itemrefs>-XML中的,应按它们在阅读器中出现的顺序。


真的是一个很好的教程..!帅气的男人..!我已经花了很多时间进行此类演示
Paresh Thakor 2010年

16
很遗憾只能为此答案提供1个投票
Tim McNamara

好答案。这正在成为常见问题解答:)
Nic Gibson 2010年

9
非常感谢Euan ...对于所有仍在寻找解决方案的人,我创建了一个示例,并张贴在ideveloperworld.blogspot.com/2011/02/epub-reader.html
MobX 2011年

请注意,如果您的意思是创建单独的新文件(即ZIP存档的解压缩内容),则没有必要“将其解压缩”。ZIP是一种非常简单的格式,如果您还没有库,可以轻松创建库,为库中的各种文件输入流,这些流直接从库中即时读取。RubyZip(rubyzip.sourceforge.net)是此类库的示例,其中提供了完整的源代码。
cjs

21

显然,EPUB是“仅”一种XML格式,因此,如果您有xml解析器和规范,则应该可以。

再加上一点兔兔?玩得开心!

编辑:您也可以在这里阅读一些代码,这是为了生成epub,而不是阅读它们,但是代码可能有用。

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


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

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


6

我曾经通读过本教程(需要免费注册,很抱歉),它给了我关于ePub的精彩介绍。deverloperWorks教程在这里

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


本教程非常出色,由编写许多可用的标准开源ePub工具的人撰写。快速阅读并为ePub格式提供了一个完美的工作介绍。
布莱恩·莫斯考


2

我正在玩arround为iPhone应用程序创建epub-framework。

目前(我真的只是个开始),我可以生成一个带有各章链接的标题页。

我的方法是

  • 使用quickconnect iphone框架作为一层(也许我更改为phonegap),基本上可以将javascript应用程序用作iphone应用程序
  • 将UNZIPed epub添加为项目的资源
  • 使用自定义版本的epub.js(在Google代码中的某个位置)解析整个内容

现在,我正在研究pageflip,一些gui和较小的可用性问题(保存正在查看的当前页面)

希望您能对如何开始有所了解


我使用epub.js时遇到了XML解析错误:没有找到位置行号1列号1的元素。可以通过提供一些链接来帮助我

您的框架如何?你在某处发表过吗?
yasirmturk 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.