【问题标题】:Can width/height of a powerpoint presentation be calculated on iPad可以在 iPad 上计算 powerpoint 演示文稿的宽度/高度吗
【发布时间】:2011-08-29 13:20:31
【问题描述】:

我有一个 ipad 应用程序,它在 UIWebView 中显示来自 NSData 的 powerpoint 演示文稿,我需要知道单张幻灯片的宽度/高度,以便知道在前进到下一张幻灯片时滚动多远。

在 PDF 中,我可以使用 CGPDFDocumentRef 进行计算,如下所示,但我找不到相应的 powerpoint API,而且由于它是 microsoft 格式,我什至怀疑它是否存在。

我可以使用 javascript 来确定整个演示文稿的宽度/高度,但这并不能帮助我知道一张幻灯片要前进多远,

为 PDF 做我需要的代码:

CFDataRef myPDFData = (CFDataRef)presentationContent;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(provider);
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, 1);
CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
int pageHeight=(int)pageRect.size.height;
int pageWidth=(int)pageRect.size.width;
//now I can advance to the proper page by doing a scrollto pageHeight*currentPage

【问题讨论】:

  • 由于幻灯片的高度和宽度在 PPT 中是演示级别的属性(换句话说,所有幻灯片的尺寸都相同),如果您可以导出演示文稿的高度,那么您就有了每个幻灯片的高度在演示文稿中滑动。但您实际上是在使用 PPT 和幻灯片,还是使用其他应用程序来表示演示文稿的内容?
  • @Steve,我正在使用 UIWebView 的幻灯片/演示内容表示。您可以在其上运行 javascript 来确定内容高度/宽度,但高度 = 整个演示文稿的高度,从幻灯片 1 中的第一个像素到幻灯片 N 中的最后一个像素。如果我可以确定幻灯片的数量,我可以取那个数字和分,但我不知道幻灯片的数量,也没有办法知道。
  • 所以实际上整个演示文稿变成了一个大的可滚动网页或类似的东西?我从上下文中认为可能是这种情况,但不确定。每张幻灯片是否都被转换为图像(如果是,你能从 DOM 中获取它的高度吗?)
  • 是的,它变成了一个巨大的可滚动网页 - 但它不会将其解析为 HTML,因此我无法按照您的建议抓取一张幻灯片作为图像。我目前正在试验 document.all[someindex].offsetHeight 和 offsetWidth - 但每次 ppt 加载时“someindex”似乎都会改变。我认为有一个我可以寻找的模式,如果我找到一种可靠的方法来获取幻灯片高度,我会发布...仅供参考,有时 document.all.length 是 10 左右,有时 > 300,并且要寻找的正确元素被埋在那个烂摊子的某个地方。 :(
  • 演示文稿到底变成了什么?您可以在某处发布示例吗?我怀疑我能理解它,但我很想看看它。

标签: iphone objective-c ios powerpoint dimensions


【解决方案1】:

想通了。

在这种情况下,UIWebView 就好像它是 HTML 页面上的 iFrame,它有一些 powerpoint 文件的源。因此,您可以对它执行某些操作,并公开某些属性。

我发现 document.all(一个数组)有元素——很多元素。我的 20 页 powerpoint 测试文件有 300 多个元素。查看它们的宽度/高度并没有太大帮助 - 有些是 iframe 本身的尺寸,有些是从幻灯片 1 的左上角像素到幻灯片 N 的右下角像素的尺寸,有些是 0x0,还有一些(隐藏中间)是幻灯片的尺寸。我发现的模式是您必须跳过 document.all 中的第一个元素,并遍历直到找到一个宽度/高度非零的元素,该元素具有相同的 clientHeight、offsetHeight、scrollHeight 值以及相同的值客户端宽度、偏移宽度和滚动宽度。其中第一个将为您提供单张幻灯片的高度/宽度,您可以从那里开始。当然,因为您使用的是 UIWebView,并且只有 stringByEvaluatingJavaScriptFromString 可以使用,所以您需要在一行返回值的 javascript 中完成所有操作。

因此,要提取 powerpoint 演示文稿的宽度/高度,您可以编写:

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();"];

并从那时起对宽度/高度做任何你需要做的事情。

哦,文档加载后不会立即填充 document.all - UIWebView 似乎需要几毫秒来收集它并使其可用。我在我的 webview 完成加载后 1 秒运行这个,它在 ppt 和 pptx 文件上都很好用。不过,它不适用于 pdf。

【讨论】:

  • 谢谢..它真的节省时间:D
【解决方案2】:

其中,这些对象包含宽度和高度属性:

Sub Test()
Dim A As Application

    Set A = Application
    Debug.Print A.Width, A.Height
    Debug.Print A.Windows(1).Width, A.Windows(1).Height
    Debug.Print A.SlideShowWindows(1).Width, A.SlideShowWindows(1).Height

End Sub

最适合你的好像是最后一个。

1680 x 1050 屏幕的结果

PPT全屏

 1266          793,5 
 1245,75       699,75 
 1260          787,5 

大约 PPT。屏幕的 1/2

 711,75        551,25 
 691,5         457,5 
 1260          787,5  <-- same as above as slideshows always go full-screan at the selected aspect ratio

【讨论】:

  • 谢谢,但是(除非我读错了)你似乎假设我在 powerpoint 或 ppviewer 中运行它——我不是。它显示在 iPad 应用程序中的 UIWebView 中,甚至没有作为 ppt 应用程序运行,而是更多地作为 Web 浏览器显示它。我有理由确定我没有获得任何 VBA DOM 访问权限——尽管仔细检查对我来说不是一个坏主意。我会试一试(以及尝试其他 javascriptie 可能性),如果你的东西有帮助,我会发布,但除非你得到肯定的回复,否则你的解决方案将不起作用。
  • 对不起...我似乎错过了这一点...我明天将删除我的答案
  • 不妨保留您的帖子 - 它不能解决问题,但也不会让我走上错误的轨道,它可能会帮助我自己或其他人尝试找到正确的解决方案也是。谢谢!
猜你喜欢
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 2012-11-12
  • 2018-03-14
  • 2014-01-26
相关资源
最近更新 更多