【问题标题】:UIWebview and powerpoint divider issueUIWebview 和 powerpoint 分隔符问题
【发布时间】:2012-02-19 23:21:06
【问题描述】:

理想情况下,我想将我的 ppt 和 pdf 文档加载到没有边框或分隔符的 web 视图中。我不相信这是可能的。所以这个问题解决了如何优雅地处理 ppt 文档中的分隔符。

我正在尝试滚动浏览一个 ppt 进行我自己的分页。我已经尝试过使用 webview 的滚动视图的内置分页,但这没有用。很难计算分隔线的高度,并且使用这种方法分隔线将始终存在。

目前我正在测试一个 31 页的幻灯片。有时,一些分隔线会显示在 web 视图的顶部。 (第15、24、25、26页)

pptx 的纵横比为 16x9。我的 webview 是 1024x576,我假设这是 webview 中幻灯片的大小。

我计算分隔线大小如下。

加载时文档的高度为 18069。
18069/576 ~ 31.369 这意味着有 31 页。
我计算分隔线占用的空间量如下:18069-(31*576) = 213。
那么 213/30 = 7.1 就是分隔线高度。

我对分隔线高度是小数感到非常困惑。此外,我很困惑为什么在 31 页示例中,第 15、24、25、26 页是没有正确排列的页面。

抱歉,到目前为止似乎是针对特定大小的问题,但这是我的代码,用于处理动态大小的文档的页面向下操作。

- (void)handlePptSwipeUp:(UISwipeGestureRecognizer *)sender
{
  //swipe up means scroll down
  CGSize pptSize = pptWebView.scrollView.contentSize;
  float y = pptSize.height;
  int pages = y/pptWebView.frame.size.height;
  float diff = pptSize.height - pages*pptWebView.frame.size.height;
  float divider = diff/(pages-1);

  CGPoint cOffset = pptWebView.scrollView.contentOffset;
  float temp = pptScrollOffset + pptWebView.frame.size.height+divider;
  if (temp+pptWebView.frame.size.height <= pptWebView.scrollView.contentSize.height)  {
    pptScrollOffset = temp;
  }
  CGRect visibleRect = CGRectMake(cOffset.x, pptScrollOffset, pptWebView.frame.size.width, pptWebView.frame.size.height);
  [pptWebView.scrollView scrollRectToVisible:visibleRect animated:YES];

  NSLog(@"content width %f\ncontent height %f\npages %d\ndiff %f\ndivider %f\npptScrollOffset %f",pptWebView.scrollView.contentSize.width,y,pages,diff,divider,pptScrollOffset);
}

这是滚动一页后的输出示例

content width 1024.000000
content height 18069.000000
pages 31
diff 213.000000
divider 7.100000
pptScrollOffset 583.099976

【问题讨论】:

  • 这可能会以失败或复杂的混乱告终。 UIWebView 具有极其复杂的视图层次结构和底层绘图方法。我可能会到处寻找不使用 UIWebView 的 powerpoint 查看器。

标签: ios uiwebview uiscrollview powerpoint


【解决方案1】:

我在其他页面上看到了类似的内容。

现在找不到页面了……所以,我只放了可以获取幻灯片大小的代码。

这是代码:

NSString *w=[_webView stringByEvaluatingJavaScriptFromString:@"function x(){var rtn='';for (var i=1;i<document.all.length;i++){var a=document.all[i];if (((a.clientWidth>0)&&(a.clientHeight>0))&&(a.scrollHeight.toString()==a.offsetHeight.toString())&&(a.offsetHeight.toString()==a.clientHeight.toString())){return ''+a.offsetWidth; }}return rtn;};x();"];
NSString *h=[_webView stringByEvaluatingJavaScriptFromString:@"function x(){var rtn='';for (var i=1;i<document.all.length;i++){var a=document.all[i];if (((a.clientWidth>0)&&(a.clientHeight>0))&&(a.scrollHeight.toString()==a.offsetHeight.toString())&&(a.offsetHeight.toString()==a.clientHeight.toString())){return ''+a.offsetHeight; }}return rtn;};x();"];

然后滚动 webView

NSString* javascript = [NSString stringWithFormat:@"window.scrollBy(0, %@);", h];   
[_webView stringByEvaluatingJavaScriptFromString:javascript];

此示例未计算边框。把它们放进去,我想它会很完美~~

【讨论】:

    猜你喜欢
    • 2016-05-31
    • 2011-04-15
    • 2014-06-25
    相关资源
    最近更新 更多