gpt4 book ai didi

javascript - 将 Keynote 中的字体替换为 JXA

转载 作者:行者123 更新时间:2023-12-01 03:54:08 26 4
gpt4 key购买 nike

我试图在 Keynote 中查找/替换有问题的字体,并发现 this script使用 JXA 更改字体,但需要扫描每个字符和文本对象以查找有问题的字体。

我已尝试使用此方法启动,但条件不起作用。救命!

PROBLEM_FONT = 'Arial'
REPLACEMENT_FONT = 'Helvetica'

document = Application('Keynote').documents[0]
for slide in document.slides
for textItem in slide.textItems
if textItem.objectText.font == PROBLEM_FONT
textItem.objectText.font = REPLACEMENT_FONT

最佳答案

您提到的 GitHub 要点是用 CoffeeScript 编写的,而不是 JavaScript。它需要被编译(转换)为 JavaScript。您的脚本是其他脚本的摘录,也是用 CoffeeScript 编写的。

这是该脚本的快速普通 JS 版本:

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;
}
}
}

重要提示:Arial 的字体名称在“底层”是不同的;例如,斜体 Arial 被列为“Arial-ItalicMT”。您的脚本没有考虑到这一点,这可能是条件语句失败的原因。

您可能想要添加子字符串检查,如下所示:

(未经测试,但希望您能明白)

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;
}
}
}

如果有帮助,这里是一个纯 AppleScript 版本,其中包括字体名称的子字符串检查。我已在 macOS Sierra 上使用 Keynote 7.0.5 成功进行了测试。

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

(我在这个例子中使用了 Monaco,以便您可以快速判断脚本是否有效,因为 Helvetica 和 Arial 很难区分。)

关于javascript - 将 Keynote 中的字体替换为 JXA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42916633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com