2010-11-17 138 views
8

我从XML文件中获取文本数据,并希望它在iPad上的UIWebView内以书页形式显示。 XML文件来自.epub,每个文件都包含一本书的单个章节,仅由p标签分隔。电子书阅读器风格分页

我希望根据UIWebView的大小(这是一个完整的iPad屏幕)以及用户选择的字体大小,将这些文件动态分页为书状页面。我目前正在将一个带有相关css的空白html页面加载到UIWebView中,根据XML中的字符数来抓取段落,并使用StringByEvaluatingJavaScriptFromString和innerHTML属性将这些段落打印到html中。

很显然,通过字符数量来创建不正确的间距,奇怪格式的页面,但我不知道如何“分页”文本。

我想要做的是类似于iPad上的应用程序“电子阅读器”:http://www.ereader.com/。他们似乎将一个文件动态分成多个页面,并将其加载到UIWebView s。这是如何完成的?

回答

2

大多数基于UIWebView的EPUB阅读器仅使用CSS3列对文档进行分页。

您可以在http://www.quirksmode.org/css/multicolumn.html

在行动中看到这个基本的想法是,你columnize“的文档,然后通过它水平滚动显示的特定页面。

在iPhone和iPad上为一个流行的(加拿大)电子书阅读器应用程序完成此项工作后,我可以告诉你,该技术可行,但远非理想。

+0

这是非常有趣的,绝对有帮助。接下来的问题是:如果CSS对整个章节进行“栏目化”,是否有通过DOM访问和编辑栏目内容的方法,以便动态更改页码等?另外,您如何限制用户在视图中自由滚动水平,以便他们被锁定为一次只查看一个页面? – Chris 2010-11-17 20:13:37

+0

此外,当你想要一个更大的列宽(比如说iPad窗口的大小)时,CSS3列看起来很奇怪。你的解决方案是什么?在这里单独提出一个问题:http://stackoverflow.com/questions/4217936/css3-columns-and-uiwebview – Chris 2010-11-18 18:02:29

+0

这是一个非常有趣的方法。您可以使用这种方法处理EPUB的内置列,还是会打破“分页”技巧? – 2010-11-24 13:49:34

1

代码已经生成。它被称为epubjs。它只是Javascript的epub阅读器。

+0

这很时髦。我检查了svn,并运行了两个不同的.epubs。问题是,当我将文件放入Xcode并且UIWebView加载index.html时,整个事情就崩溃了。只有信息标签内容可见,并且没有样式。 – Chris 2010-11-19 20:03:40

+0

另一种选择是在Motools,Jquery等中使用平滑滚动功能。以多列呈现网页,然后浏览至散列标签。在Jquery网站上有一个很好的演示,可以滚动到网页上的任何内容。 – 2010-12-09 03:02:14

0

使用带有PageviewController的UITextView。 (如果有的话,请指明你的疑惑)