更改字体时基于页面的加载epub

时间:2014-04-08 06:36:31

标签: javascript ios objective-c uiwebview

我正在做电子书阅读器应用程序,就像iBooks一样。我成功读取了一个.epub文件。但我的问题是: -

我必须添加字体大小增加和减少以及字体更改功能。当我增加和减少字体大小时,我必须调整页面。如何在页面中拆分HTML字符串?

您可以在两张图片中看到。更改字体大小后,html字符串将被分离,格式化将被折叠。

提前致谢

enter image description here enter image description here

3 个答案:

答案 0 :(得分:3)

嗯,这真是个难题......

我有一个方法可以将HTML页面分成两部分:第一页和其他部分。然后,您可以在" rest"上重复调用该方法。得到所有页面。

  1. 设置$ num_words = 100
  2. 从页面中取出第一个$ num_words字样=> $ first_page_html;
  3. 将$ first_page_html放入UIWebView和"渲染"它(见下面的注释)。
  4. 检查UIWebView的高度。合身吗?如果是,请从算法返回。
  5. 如果单词不适合UIWebView,请执行$ num_words - ;
  6. 否则,请执行$ num_words ++;
  7. GOTO 2
  8. 这是第一个应该以某种方式工作的算法。但是,存在优化机会和隐藏问题:

    你应该做的事情就像二元搜索而不是线性搜索。所以$ num_words不应该是100,99,98,97,96,...,62,而是100,80,60,70,65,64,63,62。问webview怎么会更快它比预期更大或更小。即如果webview的高度超过30%,则意味着你应该减少(1-1 /(1 + 30%))= 23%,所以你应该在第一步中将字数乘以0.77

    如果文档中有硬分页符,则您的功能应考虑到这一点。

    通过调用webView.scrollView.contentSize.height获得UIWebView的高度。我认为你必须等待UIWebView完成渲染才能检查高度。

    如果您对HTML的结构有了更多了解,您可以使用UIWebView中的-stringByEvaluatingJavaScriptFromString:方法添加单个单词,看看会发生什么。这样webview就不必一直重新渲染所有内容。

    注意:通过"渲染"我的意思是调用-loadHTMLString:baseURL:,然后等待调用-webViewDidFinishLoad:委托方法。

    如果性能是一个问题,那么以某种方式在Javascript中对此算法进行编码可能会更快(对于设备而言),但我认为这会更难。

答案 1 :(得分:2)

最后我得到了回答。这很简单。在ios 7中,您不需要为分页或任何逻辑编写javascript。

只需设置UIWebview属性即可。这是我的代码。

self.webView.paginationMode = UIWebPaginationModeLeftToRight;
self.webView.paginationBreakingMode = UIWebPaginationBreakingModePage;
self.webView.scrollView.delegate = self;
self.webView.scrollView.pagingEnabled = YES;
self.webView.scrollView.alwaysBounceHorizontal = YES;
self.webView.scrollView.alwaysBounceVertical = NO;
self.webView.scrollView.bounces = YES;

以下是示例代码a:https://github.com/kalpesh22m/Epub-Reader-With-Pegination

答案 2 :(得分:1)

首先增加你需要在em中给出字体大小的字体大小。在使用em之前,你需要给出body-size:62.5%,div中的元素给出像1.2em这样的字体大小(将作为12px)。所以当你想增加任何Div的字体大小时,你只需要增加10%的字体大小。 并且您不需要计算用于调整页面的字符,如果您正在制作响应式书籍,这不是一个好习惯。使用列属性off css,让css处理你的页面流。 请参阅以下链接了解字体大小和可流动的html结构

js fiddle

<a href="http://jsfiddle.net/hJ6Mj/4/">Js Fiddle</a>

并且还看到&#34;用于chrome&#34;的readium js。这将为您提供有关如何在浏览器上呈现epub文件的想法