104

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

4

6 回答 6

316

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

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

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

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

如果您刚刚开始,请提供一些建议:

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

这是您的代码的高级逐步说明:

1)创建一个视图UIWebView

2) 下载 EPUB 文件

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

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

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

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

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

a) 元素中的每个<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 中的 是它们应该出现在读者面前的顺序。

于 2010-01-09T18:28:00.487 回答
21

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

加上一点tuto?玩得开心!

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

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


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

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

于 2009-09-07T09:44:08.633 回答
6

我通读了一遍本教程(需要免费注册,抱歉),它让我对 ePub 有了很好的介绍。developerWorks 教程在这里

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

于 2009-09-07T18:32:23.330 回答
3

有一个开源项目 fbreader,

它也支持iphone

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

于 2010-09-09T09:49:42.840 回答
2

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

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

我的方法是

  • 使用 quickconnect iphone 框架作为一个层(也许我改为 phonegap),它基本上允许 javascript 应用程序作为 iphone 应用程序
  • 将解压后的 epub 作为资源添加到项目中
  • 使用自定义版本的 epub.js 解析整个内容(在 google-code 上的某个位置)

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

我希望这能给你一个关于如何开始的想法

于 2010-01-20T10:07:30.623 回答
1

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

于 2010-06-29T15:36:04.763 回答