【问题标题】:How can I select a text frame by script label using applescript in InDesign?如何在 InDesign 中使用 applescript 通过脚本标签选择文本框?
【发布时间】:2021-08-11 16:35:01
【问题描述】:

我正在尝试使用 AppleScript 通过使用预先存在的唯一标签来选择 InDesign 文档中预先存在的文本框架,然后修改这些文本框架的填充颜色和大小。 (这是更大工作流程的一部分,它根据列表中的值为大约 100 个此类框架调整这些属性。文本框架的标签也在列表中,标签和值的位置在他们各自的列表,着眼于将其放入循环中。)

在下面的示例代码中,“Fred”是我的文本框的标签,“Secondary 1”是我试图设置为文本框的填充颜色的色板的名称,我是尝试将文本框的宽度指定为 107 毫米而不更改任何其他几何边界。

set labelList to {"Fred","Alice","Bob"}
set valueList to {107,42,42}

tell application "Adobe InDesign 2020"
    set myDocument to active document -- presumes you've already done a data merge.
    tell myDocument
        set testFrame to every text frame whose label is item 1 of labelList
        copy geometric bounds of testFrame to {x0, y0, x1, y1}
        set geometric bounds of testFrame to {x0, y0, (x0 + item 1 of valueList), y1}
        set fill color of testFrame to {"Secondary 1"}
    end tell
    
end tell

这会失败并出现以下错误:

“无法获得 {text frame id 6546 of spread id 5872 of document id 2 of application “Adobe InDesign 2020”} 的几何边界。”编号 -1728 来自 {«class txtf» 的 «class gbnd» id 6546 of «class sprd» id 5872 of document id 2}

错误给了我一个文本框 id 编号的事实使我认为我成功地选择了带有标签“Fred”的文本框,但我没有在以下几行中充分指定某些内容。因此,脚本无法正确读取或设置该文本框架的属性。

我遇到了很多创建文本框架并设置其属性的脚本示例,网站上有一个类似的问题,用于设置文本框架内的文本属性 - 但在这种情况下,答案是文本的属性由不同的对象保存,因此没有太大帮助。

任何建议将不胜感激!

【问题讨论】:

  • 这个 example 找到标记为 "Fred" 的文本框,将其宽度更改为 107,并使用名为 "Secondary 1 的样本为其背景着色".它循环遍历每个 labelList 项目,因此 "Alice""Bob" 都将它们的宽度设置为 42,并将它们的背景颜色设置为 “中一”。本质上,在您的代码中,当您 set testFrame to every text ... 它返回一个 List 而不是对文本框架的单个引用。此外,您的 {x0, y0, x1, y1} 部分似乎是错误的,几何形状是 {y0, x0, y1, x2} - 这应该有助于设置宽度而不是高度。
  • 谢谢,@RobC - “every” 会返回一个列表是有道理的,即使它是一个只有 1 个项目的列表,但我自己不会解决这个问题!我很欣赏你的循环例子。它似乎适用于 labelList 中的前两项,但不适用于第三项 - 知道为什么吗?
  • 可能labelList 中的第三个项目/文本框(即“Bob”)被锁定。在这种情况下,在读取set geometric bounds of testFrame ... 的行之前添加set locked of testFrame to false。这将在尝试更改其几何形状和背景颜色之前解锁文本框。按照这个example.

标签: applescript adobe-indesign


【解决方案1】:

声明

set testFrame to every text frame whose label is item 1 of labelList

返回一个列表。如果您将 testFramesToProcess 命名为,然后

set testFrame to item 1 of testFramesToProcess

【讨论】:

    【解决方案2】:

    可能是因为还是这个错字?

    set valueList to (107,42,42}
    

    可能应该有{而不是((反之亦然,我不知道AppleScript)

    【讨论】:

    • 感谢您指出这一点,尤里!不幸的是,问题仍然存在。 (我尝试用我想要的值替换对这两个列表的引用,以及......没有骰子)。不过,我已经修正了错字。
    • 另一个猜测:如果文本框以某种方式移出粘贴板,有时会发生类似的情况。您可以在开始这部分脚本之前尝试扩展粘贴板
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多