Adobe Illustrator CS5〜CC編 アートボード別にSVG保存する

今回はIllustratorでアートボード別にSVG保存するスクリプトです。とは言ってもIllustratorにはSVG保存の機能があるのですが、書き出すファイル名が、重複したり連番になったりと制作者の思い通りのファイル名になりません。ということで、今回のスクリプトはアートボード名をSVGファイル名として保存します。つまりアートボード名が「logo_x」なら「logo_x.svg」として保存されます。アートボードが複数あれば、複数のsvgファイルが保存されます。


// SVG保存 GUIバージョン
// 書き出し先をグローバル(folderObj)変数で保存。あまりよくないけど。
try{
if (!folderObj){
var folderObj = new Folder("~/Desktop/");
}
}catch(e){
var folderObj = new Folder("~/Desktop/");
}
(function(){
// GUI
var winObj = new Window("dialog", "SVG保存", [0,0, 480, 280]);
// 保存形式とバージョン
winObj.add("statictext", [ 15,10, 110, 35 ], "SVGプロファイル:");
var svgType = winObj.add("dropdownlist", [120, 5, 220, 30],
["SVG 1.1", "SVG 1.0", "SVG Tiny 1.1", "SVG Tiny 1.1+", "SVG Basic 1.1", "SVG Tiny 1.2"]);
svgType.selection = 0; // 初期値をSVG1.1にする
// 保存先フォルダの指定
winObj.add("statictext", [ 25,50, 110, 75 ], "保存先フォルダ:");
var saveBtn = winObj.add("button", [ 120, 45, 220, 70 ], "保存先を指定...");
var savePath = winObj.add("statictext", [ 230,50, 470, 75 ], folderObj.fsName);
saveBtn.onClick = function(){
folderObj = Folder.selectDialog ("保存するフォルダを選択してください");
savePath.text = folderObj.fsName;
}
// 画像の埋め込み指定
var embedBtn = winObj.add("checkbox", [ 120, 80, 220, 105 ], "画像を埋め込む");
embedBtn.value = true;
// 文字の埋め込み指定
winObj.add("statictext", [ 80, 115, 110, 130 ], "文字:");
var fontText = winObj.add("dropdownlist", [ 120, 110, 220, 135 ],
["Adobe CEF", "SVG", "アウトラインに変換"]);
fontText.selection = 0;
winObj.add("statictext", [ 40, 145, 110, 170 ], "サブセット:");
var subsetText = winObj.add("dropdownlist", [ 120, 140, 300, 165 ],
["なし", "使用される文字のみ", "英数字", "英数字と使用される文字",
"英数字と欧文特殊文字", "英数字、欧文特殊文字と使用される文字", "すべての文字"]);
subsetText.selection = 1;
// CSSプロパティ
winObj.add("statictext", [ 15,175, 110, 200 ], "SVGプロファイル:");
var cssType = winObj.add("dropdownlist", [120, 175, 220, 200],
["プレゼンテーション属性", "スタイル属性", "スタイル属性 (実態参照)", "スタイル要素"]);
cssType.selection = 1; // 初期値をスタイル属性にする
// キャンセルボタン
var cancelBtn = winObj.add("button", [ 200, 230, 300, 255], "キャンセル", { name : "cancel"});
// OKボタン
var okBtn = winObj.add("button", [ 320, 230, 420, 255], "書き出し", { name : "ok"});
// ダイアログの表示処理
winObj.center();
var n = winObj.show();
if (n == 2){ return; } // キャンセルされたので以後の処理はしない
// アートボードの数だけ繰り返す
var ab = app.activeDocument.artboards;
for(var i=0; i<ab.length; i++){
ab.setActiveArtboardIndex(i);
var aName = ab[i].name;
var fileObj = new File(folderObj.fsName + "/" + aName + ".svg");
saveSVG(fileObj);
}
alert("書き出しが終了しました");
// Save SVG関数
function saveSVG(fileObj){
var exportOptions = new ExportOptionsSVG();
var type = ExportType.SVG;
// DTDを指定。SVG1.1を指定
var temp = [SVGDTDVersion.SVG1_1, SVGDTDVersion.SVG1_0,
SVGDTDVersion.SVGTINY1_1, SVGDTDVersion.SVGTINY1_1PLUS,
SVGDTDVersion.SVGBASIC1_1, SVGDTDVersion.SVGTINY1_2];
exportOptions.DTD = temp[svgType.selection.index];
// 画像を埋め込む
exportOptions.embedRasterImages = embedBtn.value;
// 小数点以下の桁数は3
exportOptions.coordinatePrecision = 3;
// 文字のエンコーディング。UTF-8に設定。
exportOptions.documentEncoding = SVGDocumentEncoding.UTF8;
// 全てのフォントを埋め込む
exportOptions.embedAllFonts = false;
// フォントの種類
var temp = [SVGFontType.CEFFONT, SVGFontType.SVGFONT, SVGFontType.OUTLINEFONT]
exportOptions.fontType = temp[fontText.selection.index];
// 使用される文字のみ
var temp = [SVGFontSubsetting.None, SVGFontSubsetting.GLYPHSUSED,
SVGFontSubsetting.COMMONENGLISH,
SVGFontSubsetting.GLYPHSUSEDPLUSENGLISH,
SVGFontSubsetting.COMMONROMAN,
SVGFontSubsetting.GLYPHSUSEDPLUSROMAN, SVGFontSubsetting.ALLGLYPHS];
exportOptions.fontSubsetting = temp[subsetText.selection.index];
// CSSプロパティを設定
var temp = [SVGCSSPropertyLocation.PRESENTATIONATTRIBUTES,
SVGCSSPropertyLocation.STYLEATTRIBUTES,
SVGCSSPropertyLocation.ENTITIES,
SVGCSSPropertyLocation.STYLEELEMENTS];
exportOptions.cssProperties = temp[cssType.selection.index];
// SVG形式で保存
app.activeDocument.exportFile(fileObj, type, exportOptions);
}
})();

ファイル名の前に文字などを付けたい場合は以下の行に文字を追加してみてください。

var fileObj = new File(folderObj.fsName + "/" + aName + ".svg");

GUIはいらない、選択したらささっと処理して欲しいという人は以下のGUIなしのスクリプトを使用してください。保存するオプションはプログラム中で変更して使用してください。
// SVG保存
(function(){
var folderObj = Folder.selectDialog ("保存するフォルダを選択してください");
if (!folderObj){ return; } // キャンセルされたら何もしない
// アートボードの数だけ繰り返す
var ab = app.activeDocument.artboards;
for(var i=0; i<ab.length; i++){
ab.setActiveArtboardIndex(i);
var aName = ab[i].name;
var fileObj = new File(folderObj.fsName + "/" + aName + ".svg");
saveSVG(fileObj);
}
// Save SVG関数
function saveSVG(fileObj){
var exportOptions = new ExportOptionsSVG();
var type = ExportType.SVG;
// DTDを指定。SVG1.1を指定
exportOptions.DTD = SVGDTDVersion.SVG1_1;
// 画像を埋め込む
exportOptions.embedRasterImages = true;
// 小数点以下の桁数は3
exportOptions.coordinatePrecision = 3;
// 文字のエンコーディング。UTF-8に設定。
exportOptions.documentEncoding = SVGDocumentEncoding.UTF8;
// 全てのフォントを埋め込む
exportOptions.embedAllFonts = false;
// 使用される文字のみ
exportOptions.fontSubsetting = SVGFontSubsetting.GLYPHSUSED;
// SVG形式で保存
app.activeDocument.exportFile(fileObj, type, exportOptions);
}
})();

[サンプルをダウンロード]