クリエイター手抜きプロジェクト[373]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");


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

もう、小正月も過ぎてしまいましたが、あけましておめでとうございます。今年もよろしくお願いいたします。

正月の連休に自動化関連とか昨年やっておくべきものを、ごっそり処理しました。といっても、とりあえず現在の状況を追加したくらいですが……。

・Illustrator CC自動化作戦
< http://www.openspc2.org/book/IllustratorCC/
>

・Adobe Bridge CC自動化作戦
< http://www.openspc2.org/book/BridgeCC/
>

・Adobe Premiere CC自動化作戦(JS低機能さが何とも、どうにかならないか)
< http://www.openspc2.org/book/PremiereCC/
>

・Adobe MediaEncoder CC自動化作戦
< http://www.openspc2.org/book/MediaEncoderCC/
>

・Photoshop CC自動化作戦
< http://www.openspc2.org/book/PhotoshopCC/
>

・InDesign CC自動化作戦
< http://www.openspc2.org/book/InDesignCC/
>

・AfterEffects CC自動化作戦
< http://www.openspc2.org/book/AfterEffectsCC/
>

・ExtendScript Toolkit CC自動化作戦
< http://www.openspc2.org/book/ExtendScriptToolKitCC/
>

・Adobe CS2〜CS6,CC JavaScriptリファレンス&ライブラリ
< http://www.openspc2.org/reibun/AdobeJS/index.html
>

・Adobe JavaScriptリファレンス
(Kindle版。なぜか正常に検索できないのかは調査中)
< http://www.amazon.co.jp/dp/4844395955
>

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。