Adobe Illustratorで指定のartboardの名称を取得するAppleScriptです。
本来であれば、Illustratorのdocument以下のartboardの名称を取得するのであれば、
tell application "Adobe Illustrator"
set aName to name of artboard 1 of document 1
end tell
★Click Here to Open This Script
で取得できる「はず」ですが、実際にAdobe Illustratorに対してこれを実行するとエラーになります(Adobe Illustrator CC2018=Adobe Illustrator v22.1にて実行)。
これは、Adobeがいいかげんな実装を行って、出荷前に一切のチェックを行わないためです。100% Adobeのせいです。
ちなみに、このproperty値からnameをIllustratorへのtellブロック外で取得すると、
のようになります。エラーメッセージの文字列としては取得できることがわかります。エラーメッセージのダイアログではAdobe IllustratorのAppleScript用語辞書の予約語を用いて表示が行われていますが、実際にエラーメッセージを(Adobe Illustratorのtellブロック外で)文字列として取得すると、用語辞書が用いられないので生のAppleEventの文字列を相手にすることになります。
というわけで、手段をえらばずにエラーメッセージから名前を取り出してみました。任意のアートボードのプロパティ値を取得してgetArtboardNameFromPropertiesを呼び出すと、アートボード名を抽出します。なお、動作原理の都合上、アートボード名にダブルクォートを含まないようにしてください。
こんなイレギュラーでトリッキーなやり方が必要なのは、Adobeの開発者がバカだからです(本当に)。心の底から軽蔑します(artboardのnameを取得する場合には、部分的にJavaScriptを呼び出して実行してもOK、というかその方法が推奨されます)。
AppleScript名:アートボードの名前を取得する |
— – Created by: Takaaki Naganoya – Created on: 2019/01/11 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions tell application "Adobe Illustrator" tell document 1 tell artboard 1 set aProp to properties set aName to getArtboardNameFromProperties(aProp) of me end tell end tell end tell on getArtboardNameFromProperties(aProp) set beginStr to "«class bAl9»:\"" try set aRec to aProp as string on error erM set offsetA to offset of beginStr in erM set ermB to text (offsetA + (length of beginStr)) thru -1 of erM set offsetB to offset of "\"" in ermB set resB to text 1 thru (offsetB – 1) of ermB return resB end try error "Illigal Data Format" –Error end getArtboardNameFromProperties |
dean says:
I have always gotten name of artboard by getting properties as list of the artboard and then setting a variable to item 7 of this list. Did I miss something or a bug in a version of illustrator?
Takaaki Naganoya says:
Hi Dean, which version of Illustrator do you use?