クリエイター手抜きプロジェクト[573]InDesign編 フォルダ/サブフォルダ内にあるすべてのAIファイルを配置する/古籏一浩

投稿:  著者:  読了時間:8分(本文:約3,700文字)



今回はInDesignの“少し使えるかもしれない”スクリプトです。実際、本の仕事で少し使ったスクリプトを少し修正しています。

スクリプトはフォルダ/サブフォルダ内にある、すべてのAIファイルを配置するというものです。AIファイルはAdobe Illustratorネイティブのファイルを示します。AIといっても人工知能の方ではありません。

以下のスクリプトは、配置するAIファイルの数が分かっている場合に使います。InDesignでは配置するAIファイルの数と同じか、それ以上のページをあらかじめ用意しておく必要があります。また、見開きページでは正しく動作しないので注意してください。





スクリプトを実行すると、AIファイルを含むフォルダを選択するダイアログがでます。サブフォルダ内にあるAIファイルも配置されますので、一番上位にあるフォルダを選択します。


// フォルダ内のすべてのAIファイルを配置
(function (){
var aiFolder=Folder.selectDialog("AIファイルがあるフォルダを選択");
if(!aiFolder){ return; }
var targetPage=0;
getAiFile(aiFolder);
// 再帰処理を行う関数
function getAiFile(targetFolder){
var fileList=targetFolder.getFiles("*.ai");
for(var i=0; i<fileList.length; i++){
var pageObj=app.activeDocument.pages[targetPage++];
var aiFrame=pageObj.place(fileList[i]);
}
// フォルダの場合は自分自身の関数を呼び出す
var folderList=targetFolder.getFiles();
for(var i=0; i<folderList.length; i++){
if(folderList[i].getFiles){
getAiFile(folderList[i]);
}
}
}
})();

なお、配置を開始するページを変更する場合は

var targetPage=0;

の0がページ番号-1なので、用途にあわせて調整してください。6ページから配置する場合は以下のように修正します。

var targetPage=5;

AIファイルを配置する際、ページの中央や指定した位置にレイアウトして欲しいこともあります。

以下のスクリプト部分の["20mm","20mm"]が配置する左上の座標になります。この座標値はX座標(左側),Y座標(上側)の順番になっています。


// フォルダ内のすべてのAIファイルを配置(位置調整)
(function (){
var aiFolder=Folder.selectDialog("AIファイルがあるフォルダを選択");
if(!aiFolder){ return; }
var targetPage=0;
getAiFile(aiFolder);
// 再帰処理を行う関数
function getAiFile(targetFolder){
var fileList=targetFolder.getFiles("*.ai");
for(var i=0; i<fileList.length; i++){
var pageObj=app.activeDocument.pages[targetPage++];
var aiFrame=pageObj.place(fileList[i]);
aiFrame[0].parent.move(["20mm","20mm"]);
}
// フォルダの場合は自分自身の関数を呼び出す
var folderList=targetFolder.getFiles();
for(var i=0; i<folderList.length; i++){
if(folderList[i].getFiles){
getAiFile(folderList[i]);
}
}
}
})();


あらかじめ配置するAIファイルの数が分かっている場合には、上記のスクリプトでよいでしょうけど、そうでない場合は困ります。

そんな時は、自動的にページを追加してレイアウトしてくれる方が便利です。以下のスクリプトは、自動的にページを追加し、位置調整も行ってくれます。


// フォルダ内のすべてのAIファイルを配置(ページ自動追加)
(function (){
var aiFolder=Folder.selectDialog("AIファイルがあるフォルダを選択");
if(!aiFolder){ return; }
var targetPage=0;
getAiFile(aiFolder);
// 再帰処理を行う関数
function getAiFile(targetFolder){
var fileList=targetFolder.getFiles("*.ai");
for(var i=0; i<fileList.length; i++){
var totalPage=app.activeDocument.pages.length-1;
if(totalPage<targetPage){
var pageObj=app.activeDocument.pages.add(
LocationOptions.AT_END // 最後にページを追加
);
}else{
var pageObj=app.activeDocument.pages[targetPage];
}
targetPage++;
var aiFrame=pageObj.place(fileList[i]);
aiFrame[0].parent.move(["20mm","20mm"]);
}
// フォルダの場合は自分自身の関数を呼び出す
var folderList=targetFolder.getFiles();
for(var i=0; i<folderList.length; i++){
if(folderList[i].getFiles){
getAiFile(folderList[i]);
}
}
}
})();

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

InDesignやPhotoshop、Illustratorなどの、自動化プログラム作成に欠かせなかったESTK(Extend Script Toolkit)ですが、開発が終了とのこと(昨年の情報で何ともですが)。

ということで、今後はVisual Studio Code上で動作する拡張機能(Adobe Script Runner)として提供されます。とはいえ、今提供されているバージョンでは必須機能がなかったりするので、もうしばらくは両方を併用しないといけないようです。

https://code.visualstudio.com/
https://medium.com/adobetech/the-future-of-extendscript-development-a-vscode-plugin-2d8d0172a357
https://qiita.com/kanemu/items/0f905e50ac75197d619f

・InDesign自動化サンプルプログラム逆引きリファレンス上/下
https://www.amazon.co.jp/dp/4844396846/
https://www.amazon.co.jp/dp/4844396854/

・創って学ぼうプログラミング
https://news.mynavi.jp/series/makeprogram

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

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

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