ある日、ある会社からInDesign2022のデータが大量にきました。画像抽出の作業なので、IDMLに変換して、作業者(古いInDesignしか持っていない)に渡す。InDesignからIDMLファイルへの変換コード自体はシンプルだが、目標フォルダー内の全て.inddファイルを探すには、再帰処理(関数が自分自身を読んで実行する)が必要です。
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
var folderObj = Folder.selectDialog("inddファイルの格納フォルダーを選択してください");
if (!folderObj) {
exit();
}
const allInddFiles = getFiles(folderObj);
const L = allInddFiles.length;
//
for (var i = 0; i < L; i++) {
$.writeln(i + "/" + L);//簡易進捗
//
var oldPath = allInddFiles[i].fullName;
var newPath = oldPath.replace(/.indd$/g, ".idml");//inddファイルを同じ場所に保存
var doc = app.open(allInddFiles[i], false);
doc.exportFile(ExportFormat.INDESIGN_MARKUP, new File(newPath));
doc.close(SaveOptions.NO);
}
//
alert("作業完了しました。");
//
function getFiles(folderObj) {
var results = [];
loop(folderObj);
function loop(folderObj) {
var myList = folderObj.getFiles("*.indd"); /////////拡張子
if (myList.length !== 0) {
results.push(myList);
}
var fileList = folderObj.getFiles();
var L = fileList.length;
while (L--) {
if (fileList[L].constructor.name === "Folder") loop(new Folder(fileList[L].fullName));
}
}
return [].concat.apply([], results);
}