2017-06-07 5 views
0

J'essaie d'automatiser la création et l'inspection de diapositives maître dans Keynote en utilisant JavaScript pour l'automatisation.Comment créer ou modifier des diapositives Keynote en utilisant JavaScript pour l'automatisation?

Création de diapositives

Il est facile de créer un nouveau document avec un thème donné et ajouter des diapositives avec des diapositives principales particulière.

// Create a new document using the "White" theme. 
var Keynote = Application('Keynote'); 
var doc = Keynote.Document({ 
    documentTheme: Keynote.themes['White'] 
}); 
Keynote.documents.push(doc); 

// Create and append a new "Title & Bullets" slide. 
var slide = Keynote.Slide({ 
    baseSlide: doc.masterSlides['Title & Bullets'] 
}); 
doc.slides.push(slide); 

Cela crée un nouveau document avec le thème « Blanc » et ajoute une nouvelle diapositive « Titre & Bullets ».

Une approche similaire ne fonctionne pas pour les diapositives principales. Cela crée un nouveau document, mais aucun nouveau modèle de diapositive n'est créé.

// Create a new document using the "White" theme. 
var Keynote = Application('Keynote'); 
var doc = Keynote.Document({ 
    documentTheme: Keynote.themes['White'] 
}); 
Keynote.documents.push(doc); 

// Create and append a new master slide. 
var slide = Keynote.MasterSlide({ 
    name: "Testing" 
}); 
doc.masterSlides.push(slide); 
En regardant la fenêtre de l'éditeur de script Replies, le push renvoie null par opposition à la poussée d'un nouveau Slide sur doc.slides qui renvoie 2 (le nombre de diapositives dans le tableau).

Il est possible de dupliquer un modèle de diapositive, mais uniquement lorsque Keynote est en mode "Edit Master Slide". Si le bouton "Modifier la diapositive principale" a été cliqué, il est alors possible de dupliquer une diapositive principale.

var Keynote = Application('Keynote'); 
var doc = Keynote.documents[0]; 
var ms = doc.masterSlides['Title & Bullets']; 
ms.duplicate(); 

Cela crée une nouvelle diapositive maître nommé "Titre & Bullets copie".

propriétés inspectent de diapositives maître

de diapositives Inspecter a des problèmes similaires, mais légèrement différentes. Le code suivant doit consigner la position, la largeur et la hauteur de l'élément de titre sur la diapositive "Title & Bullets" du document ouvert.

var Keynote = Application('Keynote'); 
var doc = Keynote.documents[0]; 
var ms = doc.masterSlides['Title & Bullets']; 

var title = ms.defaultTitleItem(); 
var pos = title.position(); 

console.log("(x,y) = (" + pos.x + "," + pos.y + ")"); 
console.log("width x height = " + title.width() + " x " + title.height()); 

Lorsqu'il est exécuté soit à l'extérieur de la "Edit Master Slide" Mode ou "Edit Master Slide" en mode mais avec une diapositive maître différente sélectionnée, ce code écrit

/* (x,y) = (0,0) */ 
/* width x height = 0 x 0 */ 

dans le journal. En revanche, lorsque vous utilisez le modèle de diapositive "Title & Bullets" sélectionné dans le mode "Edit Master Slide", les valeurs correctes sont enregistrées.

/* (x,y) = (75,35) */ 
/* width x height = 874 x 170 */ 

Question

Quelle est la bonne façon de créer des diapositives de maître, d'inspecter leurs propriétés, et en fin de compte les changer?

Répondre

2

Ecrivez d'abord votre code dans AppleScript et voyez si vous pouvez le faire fonctionner ici. AppleScript est un langage horrible, mais son support d'événement Apple est sans pareil et c'est la norme de facto par rapport à laquelle toutes les applications scriptables sont développées et testées.

En cas de défaillance de AS, Keynote est interrompue. Si cela fonctionne dans AS mais échoue quand vous le traduisez en JXA, JXA est cassé.Le framework CocoaScripting (utilisé pour implémenter le support des événements Apple dans macOS Apps) et JXA ont beaucoup de défauts et de défauts, et bien sûr les applications scriptables individuelles peuvent contenir leurs propres bugs et leur mauvais design †, vous devrez donc comprendre si c'est l'application ou JXA qui échoue à travers le processus d'élimination.

...

D'après votre description des comportements observés et sachant que les applications propres scriptable d'Apple sont souvent bogués et mal conçu, je penche vers l'application, mais je n'ai pas touché des applications iWork dans les années donc je ne peux pas dire à coup sûr. Si vous trouvez que c'est l'application et décidez de déposer un rapport de bogue (qui fonctionne parfois et d'autres fois non), assurez-vous d'inclure le code AppleScript qui illustre le problème; AS est la norme de facto et JXA ne l'est pas, ce sera donc une couche d'obfuscation de moins et des bugs potentiels pour les dépanneurs à parcourir.


(† Pas aidé par le fait que la documentation pour les développeurs d'Apple sur la façon dont l'automatisation des événements d'Apple fonctionne réellement et comment le mettre en œuvre est bien trop terrible.)

+0

C'est une bonne suggestion. Je vais l'essayer. –