Iphone 能否在iPad上计算powerpoint演示文稿的宽度/高度

Iphone 能否在iPad上计算powerpoint演示文稿的宽度/高度,iphone,objective-c,ios,powerpoint,dimensions,Iphone,Objective C,Ios,Powerpoint,Dimensions,我有一个ipad应用程序,它在UIWebView中显示来自NSData的powerpoint演示文稿,我需要知道一张幻灯片的宽度/高度,以便知道在进入下一张幻灯片时滚动的距离 在PDF中,我可以使用CGPDFDocumentRef计算它,如下所示,但我找不到powerpoint对应的API,因为它是microsoft格式,我怀疑它是否存在 我可以使用javascript来确定整个演示文稿的宽度/高度,但这并不能帮助我知道一张幻灯片要走多远 执行PDF所需操作的代码: CFDataRef myPD

我有一个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

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

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
711,75 551,25
691,5         457,5 
1260787,5

在本例中,UIWebView的作用就好像它是HTML页面上的iFrame,该页面有一些powerpoint文件的源。所以,你可以对它做一些特定的事情,以及某些暴露的属性

我发现document.all(数组)有很多元素。我的20页powerpoint测试文件包含300多个元素。查看它们的宽度/高度并没有太大帮助-有些是iframe本身的尺寸,有些是幻灯片1的左上像素到幻灯片N的右下像素的尺寸,有些是0x0,有些(埋在中间)是幻灯片的尺寸。我发现的模式是,您必须跳过document.all中的第一个元素,并进行迭代,直到找到一个具有非零宽度/高度的元素,这些元素具有相同的clientHeight、offsetHeight、scrollHeight值,以及相同的clientWidth、offsetWidth和scrollWidth值。其中的第一个将为您提供单个幻灯片的高度/宽度,您可以从那里开始。当然,因为您使用的是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();"];
NSString*w=[webview stringByEvaluatingJavaScriptFromString:@“函数x(){var rtn=”;for(var i=1;i0)&&&(a.clientHeight>0))&&(a.scrollHeight.toString()==a.offsetHeight.toString())&&(a.offsetHeight.toString()==a.clientHeight.toString()){返回“+a.offsetWidth;}返回rtn;};x();”;
NSString*h=[webview stringByEvaluatingJavaScriptFromString:@“函数x(){var rtn='';for(var i=1;i0)&&&(a.clientHeight>0))&&(a.scrollHeight.toString()==a.offsetHeight.toString())&&(a.offsetHeight.toString()==a.clientHeight.toString()){返回“+a.offsetHeight;}}返回rtn;};x();”;
从这一点开始,你可以根据宽度/高度做任何你需要做的事情


哦,文档加载后不会立即填充document.all-UIWebView似乎需要几毫秒来收集这些信息并使其可用。我在webview完成加载后运行了1秒,它在ppt和pptx文件上都非常有效。但是,它不适用于pdf。

因为幻灯片高度和宽度是PPT中的演示文稿级别属性(换句话说,所有幻灯片的尺寸都相同),如果您可以导出演示文稿的高度,则可以得到演示文稿中每个幻灯片的高度。但是你真的在使用PPT和幻灯片,还是其他应用程序对演示内容的表示?@Steve,我使用的是UIWebView对幻灯片/演示内容的表示。您可以在其上运行javascript来确定内容高度/宽度,但高度=整个演示文稿的高度,从幻灯片1中的第一个像素到幻灯片N中的最后一个像素。如果我可以确定幻灯片的数量,我可以将该数量除以,但我不知道幻灯片的数量,所以实际上整个演示变成了一个大的可滚动网页或类似的东西?从上下文来看,我认为可能是这样,但我不确定。是的,它变成了一个巨大的可滚动网页——但它不会将其解析为HTML,因此我无法按照您的建议将一张幻灯片作为图像抓取。我目前正在试验document.all[someindex]。OffsetSight和offsetWidth-但每次加载ppt时,“someindex”似乎都会发生变化。我认为有一个模式我可以寻找,并将张贴,如果我找到一个可靠的方法来获得幻灯片高度。。。仅供参考,有时document.all.length是10左右,有时大于300,需要寻找的合适元素就埋在那堆乱七八糟的东西里(演讲到底变成了什么?你能在什么地方张贴一个例子吗?我怀疑我能理解它,但我很想看看。谢谢,但是(除非我看错了你)你似乎认为我是在powerpoint或ppviewer中运行它的——我不是。它在iPad应用程序中的UIWebView中显示,甚至不是作为ppt应用程序运行,而是作为web浏览器来显示。我有理由相信我没有获得任何VBA DOM访问权限——尽管我仔细检查一下不是个坏主意。我会给它旋转(以及尝试其他javascriptie可能性),如果你的东西有帮助,我会发帖,但除非你听到积极的回应,否则你的解决方案将不起作用。对不起……我似乎错过了这一点……明天我会删除我的答案,也会保留你的帖子——它不会回答问题,但也不会让我走上错误的轨道,这可能会帮助我自己或其他人找到答案还有roper解决方案。谢谢!谢谢..它真的节省了时间:D