JavaScript
illustrator

Illustratorのスクリーン用に書き出しを自動化

都内でデザイナー職をやっています

目指すこと


Illustratorの『スクリーン用に書き出し』をスクリプトにやってもらい
アートボードごとにSVGを書き出す

リファレンスを見る

https://www.adobe.com/devnet/illustrator/scripting.html
JavaScript、VB Script、AppleScript でのそれぞれのリファレンスが
PDF がダウンロードできるAdobe公式のページ

それはやばいものだった

  1. PDFである
    • あのAdobeぞ? Acrobat作っている Adobeぞ? なので仕方ない
  2. PDFにロックがかかっており、テキストのコピーすらできない
    • 英語のため、翻訳しようと思ったときに困る 英語が読めれば問題ないから仕方ない
    • コードもすべて写経しないといけない 写経は大事だから仕方ない
  3. スクリーン用に書き出し のスクリプトがない

仕方ない

Google検索で情報を集めることにした

なお

ドキュメント自体を保存(Cmd+S)させる exportFileリファレンスで解説されている
それでもSVGの出力をすることができるが、元のドキュメントへの影響がありそうなので使わない

コード

export-svg.js
#target "Illustrator";

var doc = app.activeDocument;

// 保存するフォルダを選択させる
var folder = Folder.selectDialog();
if (!folder) return;
var file = new File(folder + '/');

var whatToExport = new ExportForScreensItemToExport();
whatToExport.document = true;

var options = new ExportForScreensOptionsWebOptimizedSVG();
options.coordinatePrecision = 2;
options.cssProperties = SVGCSSPropertyLocation.PRESENTATIONATTRIBUTES;
options.documentEncoding = SVGDocumentEncoding.UTF8;
options.saveMultipleArtboards = true;

// (exportFolder: File , exportFormat: ExportForScreensType , options:any, itemToExport: ExportForScreensItemToExport , fileNamePrefix: string )
doc.exportForScreens(file, ExportForScreensType.SE_SVG, options, whatToExport, '');

設定の内容

ExportForScreensItemToExport

スクリーン用に書き出し オプション
ここの画面での設定と同じ

オプション 型(予想) 内容
document boolean 不明 trueにするのがよさそう?
artboards string 書き出し範囲のこと
01-50などと指定
省略はすべてのアートボードを出力
その他 不明
今後のリファレンスに期待

ExportForScreensOptionsWebOptimizedSVG

形式の設定
この画面での設定と同じ

リファレンスExportOptionsSVG と同じ内容が書けるっぽい

オプション 内容
compressed boolean svgzに圧縮するかどうか
coordinatePrecision number(long) 小数点以下の桁数
パスの精密度に影響
cssProperties SVGCSSPropertyLocation スタイル
インラインスタイルにするかとか
documentEncoding SVGDocumentEncoding svgファイルのエンコード
DTD SVGDTDVersion SVGのバージョン
SVGDTDVersion.SVG1_1とか
saveMultipleArtboards boolean アートボードごとに保存するかどうか
exportFileでは必要だが、おそらく不要
その他 いろいろ

おわりに

Adobeのリファレンスについては、もっと扱いやすいようにしてほしさがある
また今回のスクリプトだけでは利点は特にないが、他のスクリプトと組み合わせて楽に仕事をしたい