Adobe Illustrator CS4〜CC編 空のレイヤーを削除する/調べる

Illustratorで制作していると、空っぽのレイヤーが残ってしまうことがあります。今回は、ドキュメントに残ってしまった空のレイヤーを削除するスクリプトです。

以下のスクリプトは開いているドキュメント内の空レイヤーを削除します。


// 現在のドキュメントの空レイヤーを削除する
function deleteLayer(){
var len = activeDocument.layers.length;
if (len == 1){
alert("レイヤーが一枚なので削除できません");
return;
}
for(var i=len-1; i>=0; i--){
var d = activeDocument.layers[i];
var t = d.compoundPathItems.length + d.graphItems.length +
d.groupItems.length + d.legacyTextItems.length + d.meshItems.length +
d.pathItems.length + d.placedItems.length + d.pluginItems.length +
d.rasterItems.length + d.symbolItems.length + d.textFrames.length;
if (t == 0){
d.locked = false;
d.remove();
}
}
}
deleteLayer();
ファイルが複数ある場合にも、空レイヤーを削除することができます。が、さすがに確認なしで削除処理してしまうのは不安があります(精神的にちょっとよろしくない)。そこで、ドキュメント内に空レイヤーがある場合だけ、ファイルを開くようにします。その後、上記スクリプトを使って空レイヤーを削除すればよいでしょう。

// 選択したフォルダ内にあるドキュメントを開いて空レイヤーがあるか調べる
function checkEmptyLayer(){
var fileList = getFiles(["*.ai"]);
for(var j=0; j<fileList.length; j++){
app.open(fileList[j]);
var len = activeDocument.layers.length;
if (len > 1){
for(var i=len-1; i>=1; i--){
var d = activeDocument.layers[i];
var t = d.compoundPathItems.length + d.graphItems.length +
d.groupItems.length + d.legacyTextItems.length + d.meshItems.length +
d.pathItems.length + d.placedItems.length + d.pluginItems.length +
d.rasterItems.length + d.symbolItems.length + d.textFrames.length;
// 1つでも空のレイヤーがあったら以後の処理はしない
if (t == 0){
break;
}
}
}else{ // ドキュメントを閉じる
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
}
}
checkEmptyLayer();
// フォルダ内にある指定された拡張子のファイルを配列として返す
function getFiles(fileTypes, basePath,options){
options = options || {};
if(!basePath){
basePath = Folder.selectDialog("フォルダを選択してください");
if (!basePath){ return; } // キャンセルされた場合は処理しない
}
var allList = [];
// パラメータが文字の場合
if (typeof(fileTypes) == "string"){
getFileList(new Folder(basePath), fileTypes);
return toJapanese(allList, options.japanese);
}
// パラメータが配列の場合
if (fileTypes.push){
for(var i=0; i<fileTypes.length; i++){
getFileList(new Folder(basePath), fileTypes[i]);
}
return toJapanese(allList, options.japanese);
}
function getFileList(currentFolder, fileType){
var fileList = currentFolder.getFiles(fileType);
var fileList2 = currentFolder.getFiles("*"); // Sub Folder
allList = allList.concat(fileList);
for(var i=0; i<fileList2.length; i++){
if (fileList2[i].getFiles){
if (fileList2[i].name.charAt(0) == "."){ continue; }
getFileList(fileList2[i], fileType); // フォルダがある限り繰り返し
}
}
}
// 日本語に変換(nameJ, fullNameJ)
function toJapanese(fileList, flag){
if (!flag){ return fileList; }
for(var i=0; i<fileList.length; i++){
fileList[i].nameJ = File.decode(fileList[i].name);
fileList[i].fullNameJ = File.decode(fileList[i].fullName);
}
return fileList;
}
}

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