gpt4 book ai didi

javascript - 如何在 Adob​​e InDesign 中将 app.selection[0] 用于脚本

转载 作者:行者123 更新时间:2023-12-04 20:00:16 25 4
gpt4 key购买 nike

我想通过仅测试当前选择(而不是整个文档)来运行代码,并且我很难准确理解数组“app.selection”及其方法的工作原理。首先,我使用“for”循环来循环通过使用选择的每个项目:

for(loop = 0; loop < app.selection.length; loop++){
var sel = loop;
}

这没问题,但是当我想确定每个项目是什么时,它变得有点奇怪。例如,
for(txt = 0; txt < app.selection[sel].textFrames.length; txt++){
// do something to each text frame in the selection here.
}

没有按预期工作,但是
for(img = 0; img < app.selection[sel].allGraphics.length; img++){
// do something to each graphic in the selection here
}

似乎工作正常,无论选择是否仅包含图形,或者它是在组内还是组外。

有时,似乎 app.selection[0] 是单独访问该项目的唯一方法。换句话说,如果选择了一个文本框架,app.selection[0] 可能与 app.document.textFrames[0] 相同,在这种情况下,这样说是多余的(并且不正确)
app.document.textFrames[0].textFrames[0]

然而,不同页面项目上的相同概念就像魅力一样。跟随它是相当令人费解的。此外,似乎无法确定该项目是什么类型的对象。我想说几句:
if (app.selection[0] == [object TextFrame])

但这似乎对我不起作用。有没有办法清楚地测试当前项目是组、图形还是文本框,并根据结果做不同的事情?

最佳答案

app.selection 返回一个 Objects 数组,因此数组中的每一项都可以是不同的类型,并且它可用的属性和方法会有所不同。使用 Extendscript Javascript 控制台时,您只需键入即可即时查看数组中的特定项目是什么

app.selection[0]

(或任何数字)。结果将类似于 [object TextFrame]。

在循环选择数组时,您可以使用 app.selection[0].constructor.name 来确定每个数组的类型。或者,如果您只对某些类型感兴趣,
if (app.selection[i] instanceof TextFrame){}

届时,您将了解更多关于您可以访问哪些属性的信息,具体取决于类型。

要回答问题的第二部分,没有 allTextFrames 属性,但有 allPageItems 属性。这将返回一个 pageItems 数组(textFrames、组等),您可以像 app.selection 一样使用它。因此,如果我在文档的第一页上分组了三个文本框架(仅此而已),我可以看到以下内容都是正确的:
app.activeDocument.pages[0].textFrames.length == 0;
app.activeDocument.pages[0].allPageItems.length == 4;
app.activeDocument.pages[0].allPageItems[0] instanceof Group;
app.activeDocument.pages[0].allPageItems[1].constructor.name == "TextFrame";

因此,如果它比 textFrames 集合对您更有用,您可能可以循环浏览该数组。请记住,您无权访问 TextFrames 的特殊集合属性(如everyItem())。

关于javascript - 如何在 Adob​​e InDesign 中将 app.selection[0] 用于脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29908569/

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