Das GitHub-Stichwort, auf das Sie sich beziehen, ist in CoffeeScript geschrieben, nicht in JavaScript. Es muss in JavaScript kompiliert (konvertiert) werden. Ihr Skript, das ein Auszug des anderen Skripts ist, wird ebenfalls in CoffeeScript geschrieben.
Hier ist eine schnelle Vanille JS Version des Skripts:
var PROBLEM_FONT = 'Arial';
var REPLACEMENT_FONT = 'Helvetica';
var slides = Application('Keynote').documents[0].slides;
for (var i = 0; i < slides.length; i++) {
var slide = slides[i];
for (var j = 0; j < slide.textItems.length; j++) {
var textItem = slide.textItems[j];
if (textItem.objectText.font === PROBLEM_FONT) {
textItem.objectText.font = REPLACEMENT_FONT;
}
}
}
Wichtiger Hinweis: Der Name Schriftart Arial ist anders ‚unter der Haube‘; Beispielsweise wird kursiv geschriebener Arial als "Arial-ItalicMT" aufgelistet. Ihr Skript berücksichtigt dies nicht, weshalb die bedingte Anweisung möglicherweise fehlschlägt.
Sie möchten vielleicht wie so eine Teilprüfung hinzuzufügen:
(ungetestet, aber hoffentlich bekommen Sie die Idee)
var PROBLEM_FONT = 'Arial';
var REPLACEMENT_FONT = 'Helvetica';
var slides = Application('Keynote').documents[0].slides;
for (var i = 0; i < slides.length; i++) {
var slide = slides[i];
for (var j = 0; j < slide.textItems.length; j++) {
var textItem = slide.textItems[j];
if (textItem.objectText.font.indexOf(PROBLEM_FONT) !== -1) {
textItem.objectText.font = REPLACEMENT_FONT;
}
}
}
Falls es hier hilft, ist eine reine Apple Version, die enthält eine Teilzeichenfolgeprüfung für den Schriftartnamen. Das habe ich mit Keynote 7.0.5 auf macOS Sierra erfolgreich getestet.
tell application "Keynote"
if (front document exists) then
tell every slide of front document
-- Targeting body text
tell every text item
if (the font of its object text as text) contains "Arial" then
set the font of its object text to "Monaco"
end if
end tell
-- Targeting slide titles
tell default title item
if (the font of its object text as text) contains "Arial" then
set the font of its object text to "Monaco"
end if
end tell
-- Targeting text boxes within groups
tell every group
tell every text item
if (the font of its object text as text) contains "Arial" then
set the font of its object text to "Monaco"
end if
end tell
end tell
end tell
end if
end tell
(I verwendet Monaco für dieses Beispiel so, dass Sie schnell, wenn das Skript gearbeitet sagen kann, da Helvetica und Arial schwer zu unterscheiden sind.)
Wow das ist fantastisch danke! Eines der Dinge, die ich noch zu verstehen versuche, ist die Verwendung des PostScript-Namens in Keynote. Insbesondere versuche ich, alle "diese Schriftarten fehlen in diesem Dokument" Warnungen zu beseitigen und diese zu verwenden, um die Schriftarten zu finden und zu ersetzen. Zum Beispiel möchte ich "HelveticaNeue-Bold" mit "TimesNewRoman-Italic" finden und ersetzen, aber aus irgendeinem Grund funktioniert es bei einigen Schriftarten, aber nicht bei anderen. – James
Froh, dass es geholfen hat. Postscript-Namen sind immer etwas mühsam, keine einfache Lösung. Deshalb habe ich eine partielle Namensuche verwendet. Wenn die obige Antwort für Sie funktioniert, markieren Sie sie bitte als "richtig". Vielen Dank! – pipwerks
Eine kleine Sache, mit der ich kämpfe, ist, dass es scheint, einige Textelemente zu überspringen? Ich schaue mir die Applescript-Dokumentation an und sehe nur "text item", "default title item", "default body item" als Textobjekte, aber selbst wenn ich diese hinzufüge, gibt es einige Textobjekte, die davon nicht betroffen sind. Irgendwelche Ideen? – James