Adobe Illustrator CC 2018(バージョン22.1)で、オープン中の(複数のアートボードを持つ)書類を、アートボード単位で別書類に分けるAppleScriptです。
書類は(とりあえず)デスクトップに書き込まれます。
こういうコマンドが最初からあってもおかしくないところですが、存在していないようなので書いてみました。まずは、オープン中の書類のパスを取得し、各アートボードの名称を取得して書き出し時のファイル名として使用します。
元ファイルをクローズしては、デスクトップに新規名称でコピーし、コピーした書類をオープン、書き出し対象外のアートボードを順次選択してはアートボード上のオブジェクトを削除してアートボード自体も削除、すべて削除したら保存してクローズという動作を行います。
本来であれば高速化のために複数のアートボードを一括で削除することを考えるところですが、アートボードの削除だけであればできるものの、アートボード上のオブジェクトの削除が行えなくなってしまうので、順次削除に落ち着きました。また、本Scriptが本気でスピードを求められるようなハードな用途ではなく、文字や画像の流し込みテンプレートのメンテナンス用という「平和な用途」のために作成したものであるため、高速化処理については考慮していません。
最初からアートボード外に置かれたオブジェクトについては削除していません。あくまで自分用のツールなので作り込む必要性を感じません。気が向いたら削除するのではないでしょうか。
本Scriptの作成中にも、単にAppleScriptで命令を出しただけで派手にクラッシュしまくるAdobe Illustrator。バージョンが上がって見た目が変わっても、あの出来の悪いIllustratorであることに変わりはないのだと思い知らされました。
AppleScript名:オープン中のIllustrator書類をartboardごとに分割 v2.scptd |
— – Created by: Takaaki Naganoya – Created on: 2018/08/07 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.5" — El Capitan (10.11) or later use framework "Foundation" use scripting additions set dPath to (path to desktop) as string set namesList to {} tell application "Adobe Illustrator" tell front document set aCount to count every artboard set aPath to (file path) as string end tell repeat with i from 1 to aCount set aName to getArtboardName(i – 1) of me –index base correction (1 –> 0) set the end of namesList to aName end repeat close every document saving no end tell repeat with i from 1 to aCount set aRes to retSerialListWithExclusion(1, aCount, i) of me set aaRes to reverse of aRes –artboardをIndex値で指定するため、先頭から削除するとIndex値が変わる。そのため逆順に処理 set tmpName to contents of item i of namesList set fromFile to POSIX path of aPath set fromFilePOSIX to quoted form of POSIX path of fromFile set toFile to (dPath & tmpName & ".ai") set toFilePOSIX to quoted form of POSIX path of toFile set shText to "cp " & fromFilePOSIX & " " & toFilePOSIX do shell script shText tell application "Adobe Illustrator" open file toFile tell front document repeat with ii in aaRes set jj to ii as integer selectArtboard(jj – 1) of me –index base correction (1 –> 0) selectobjectsonactiveartboard delete selection delete artboard jj end repeat close with saving end tell end tell end repeat –https://lists.apple.com/archives/applescript-users/2015/Jul/msg00104.html on selectArtboard(theArtboardIndex as string) tell application "Adobe Illustrator" tell front document –Index is 0 based do javascript ("app.activeDocument.artboards.setActiveArtboardIndex(" & theArtboardIndex & ")") end tell end tell end selectArtboard on getArtboardName(theArtboardIndex as string) tell application "Adobe Illustrator" tell front document –Index is 0 based do javascript ("app.activeDocument.artboards[" & theArtboardIndex & "].name") end tell end tell end getArtboardName on retSerialListWithExclusion(aFromNum as integer, aToNum as integer, anEXnum as integer) set outList to {} repeat with i from aFromNum to aToNum if i = anEXnum then — else set the end of outList to i end if end repeat return outList end retSerialListWithExclusion |