Poate lățime / înălțime a unei prezentări PowerPoint se calculează pe iPad

voturi
1

Am o aplicație iPad, care afișează o prezentare PowerPoint de la un NSData, într-un UIWebView, și am nevoie să știu lățime / înălțime a unui singur diapozitiv, așa că știu cât de departe pentru a defila atunci când avansează la următorul diapozitiv.

În PDF, pot să-l calcula folosind CGPDFDocumentRef, ca mai jos, dar nu pot găsi un API corespunzător pentru powerpoint, și din moment ce un format Microsoft, mă îndoiesc că există chiar.

Eu pot folosi JavaScript pentru a determina lățimea / înălțimea prezentării ÎNTREGUL, dar asta nu ajută-mă să știu cât de departe pentru a avansa pentru a merge un diapozitiv singur,

Cod pentru a face ceea ce am nevoie pentru un 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
Întrebat 29/08/2011 la 12:20
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
0

printre altele, aceste obiecte conțin lățime și înălțime proprietăți:

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

Cel mai potrivit pentru tine pare a fi ultima.

Rezultate pentru un ecran de 1680 x 1050

PPT în ecran complet

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

PPT în ca. 1/2 din ecran

 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
Publicat 30/08/2011 la 09:24
sursa de către utilizator

voturi
3

Dat seama.

În acest caz, UIWebView acționează ca în cazul în care este un iframe pe o pagină HTML, care are o sursă de unele fișier powerpoint. Deci, există anumite lucruri pe care le puteți face pentru a-l, și anumite proprietăți care sunt expuse.

Am constatat că document.all (o matrice) are elemente - multe elemente. 20 pagina Dosarul meu de test a avut peste 300 de powerpoint elemente. Privind la lățime / înălțime dintre ele nu a fost prea de ajutor - unii au fost dimensiunile iframe în sine, unele au fost dimensiunile de pixeli din stânga sus al slide-1 pixel-dreapta jos a slide-N, unele au fost 0x0, iar unele (burried în mijloc) au fost dimensiunile unui diapozitiv. Modelul am găsit a fost că trebuie să sari peste primul element din document.all, și itera până când a găsit una cu non-zero, lățime / înălțime, care au valori identice pentru clientHeight, offsetHeight, scrollHeight, precum și valori identice pentru clientWidth, offsetWidth și scrollWidth. Prima dintre acestea vă va da înălțimea / lățimea unui singur diapozitiv, și puteți merge de acolo. Și, desigur, pentru că folosiți un UIWebView, și au doar stringByEvaluatingJavaScriptFromString de a lucra cu, trebuie să faceți acest lucru într-o singură linie de cod JavaScript care returnează valoarea.

Deci, pentru a extrage lățime / înălțime de o prezentare PowerPoint, puteți scrie:

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

și de a face tot ce este nevoie cu un lățime / înălțime din acel moment.

Oh, și document.all nu este populat imediat ce documentul este încărcat - UIWebView pare să aibă nevoie de câteva milisecunde pentru a aduna și că face disponibil. Eu conduc o secundă după ce WebView mea sa terminat de încărcat, și funcționează foarte bine pe ambele fișiere pptx ppt și. aceasta nu funcționează pe pdf, totuși.

Publicat 01/09/2011 la 14:59
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more