0

我正在尝试使用 JavaScript 自动化创建和检查 Keynote 中的母版幻灯片。

创建母版幻灯片

创建具有给定主题的新文档并向其添加带有特定母版幻灯片的幻灯片很容易。

// 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);

这将创建一个具有“白色”主题的新文档并附加一个新的“标题和项目符号”幻灯片。

类似的方法不适用于母版幻灯片。

// 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);

这会创建一个新文档,但不会创建新的母版幻灯片。查看“脚本编辑器”窗口Repliespush返回null与推送新的相反,后者返回 2(数组中的幻灯片数)。Slidedoc.slides

可以复制母版幻灯片,但前提是 Keynote 处于“编辑母版幻灯片”模式如果单击了“编辑母版幻灯片”按钮,则可以复制母版幻灯片。

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

这将创建一个名为“标题和项目符号副本”的新母版幻灯片。

检查母版幻灯片的属性

检查母版幻灯片有类似但略有不同的问题。以下代码应在打开文档的“标题和项目符号”母版幻灯片上记录标题项的位置、宽度和高度。

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

当在“编辑母版幻灯片”模式之外或在“编辑母版幻灯片”模式下运行但选择了不同的母版幻灯片时,此代码写道

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

到日志。相反,当在“编辑母版幻灯片”模式下选择“标题和项目符号”母版幻灯片运行时,会记录正确的值。

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

问题

创建母版幻灯片、检查其属性并最终更改它们的适当方法是什么?

4

1 回答 1

2

首先在 AppleScript 中编写代码,看看是否可以让它在那里工作。AppleScript 是一种糟糕的语言,但它对 Apple 事件的支持是首屈一指的,而且它是开发和测试所有可编写脚本的应用程序所依据的事实上的标准。

如果它在 AS 中失败,则 Keynote 被破坏。如果它在 AS 中工作,但在将其转换为 JXA 时失败,则 JXA 已损坏。CocoaScripting 框架(用于在 macOS 应用程序中实现 Apple 事件支持)和 JXA 都有很多缺陷和不足,当然个别可编写脚本的应用程序也可能包含自己的错误和糟糕的设计†,所以你必须弄清楚如果是应用程序或 JXA 在消除过程中失败。

...

根据您对观察到的行为的描述,并且知道 Apple 自己的可编写脚本的应用程序经常存在错误和设计不良,我倾向于该应用程序,但我已经多年没有接触过 iWork 应用程序,所以不能肯定地说。

如果您发现它是应用程序并决定提交错误报告(有时有效,有时无效),请确保包含说明问题的 AppleScript 代码;AS 是事实上的标准,而 JXA 不是,因此它会少一层混淆和潜在的错误,供疑难解答人员涉足。


(†Apple 的开发人员文档中关于 Apple 事件自动化如何实际工作以及如何很好地实施它的事实也很糟糕,这一点也没有帮助。)

于 2017-06-09T11:48:24.337 回答