クリエイター手抜きプロジェクト[407]Adobe InDesign CS3〜CC 2014編 ページ外にテキストフレームがあるか調べる/古籏一浩

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


今回はページ外にテキストフレームがあるか調べるスクリプトです。ドキュメント全体のテキストフレーム総数と、ページ単位でテキストフレームの合計数が合っていれば、ページ外にテキストフレームはありません。不一致ならページ外にテキストフレームがあることになります。


以下のスクリプトを実行すると、現在のアクティブドキュメントを調べて結果をアラートダイアログに表示します。


// ページ外にテキストフレームがあるか調べる
(function(){
var flag = checkTextFrame(app.activeDocument);
if (flag == true){
alert("ページ外にテキストフレームがあります");
}else{
alert("ページ外にテキストフレームはありません");
}
// ページ外にテキストフレームがあるかどうか調べる
function checkTextFrame(docObj){
var tfAllObj = docObj.textFrames;
var total = 0;
for(var i=0; i<docObj.pages.length; i++){
total = total + docObj.pages[i].textFrames.length;
}
if (total != tfAllObj.length){
// ページ内にあるテキストフレームと全体のテキストフレームの数が不一致ならページ外にあり
return true;
}
return false;
}
})();


ドキュメントをひとつずつ開いて確認するのは面倒だという人は、以下のスクリプトを使ってください。

あらかじめ、調べるinddファイルをフォルダに入れておきます。サブフォルダ内にあるinddファイルもチェック対象になります。ページ外にテキストフレームがある場合は、指定されたフォルダ内にエイリアスが作成されます。


// InDesignのinddファイルでページ外にテキストフレームがあったらエイリアスを作成
(function(){
// inddファイルがあるフォルダを指定する
var folderObj = Folder.selectDialog("文字を検索するインデザイン(indd)ファイルがあるフォルダを選択してください");
if (!folderObj){ return; } // キャンセルされた場合は何も処理しない
// エイリアスを入れるフォルダを指定する
var saveFolder = Folder.selectDialog("結果(エイリアス)を保存するフォルダを選択してください");
if (!saveFolder){ return; } // キャンセルされた場合は何も処理しない
makeAliasList(folderObj);
alert("チェックが終了しました");
// エイリアスを作成する関数
function makeAliasList(folderObj){
// inddファイル一覧を取得する
var fileList = folderObj.getFiles("*.indd");
// ファイルの数だけ開いて文字列を検索する
for(var i=0; i<fileList.length; i++){
app.open(fileList[i]);
var flag = checkTextFrame(app.activeDocument);
if (flag == true){
// ファイル名が重複しないようにスラッシュをアンダーバーにしたファイル名を使う
var filename = fileList[i].fsName.replace(new RegExp("/", "g"), "_");
// エイリアスとなるファイルオブジェクトを作成する
var aliasFileObj = new File(saveFolder+"/"+filename);
// エイリアスを作成する
var flag = aliasFileObj.createAlias(fileList[i]);
if (flag == false){
$.writeln("失敗:"+filename);
// もし、アラートダイアログを表示した方がいい場合は以下の行の//を消してください。
// alert("失敗:"+filename);
}
}
app.activeDocument.close(SaveOptions.no);
}
// フォルダを含めた一覧を取得する
fileList = folderObj.getFiles();
for(var i=0; i<fileList.length; i++){
// フォルダかどうか調べる
if(fileList[i].getFiles){
makeAliasList(fileList[i]); // フォルダの場合は再帰呼び出し
}
}
// ページ外にテキストフレームがあるかどうか調べる
function checkTextFrame(docObj){
var tfAllObj = docObj.textFrames;
var total = 0;
for(var i=0; i<docObj.pages.length; i++){
total = total + docObj.pages[i].textFrames.length;
}
if (total != tfAllObj.length){
// ページ内にあるテキストフレームと全体のテキストフレームの数が不一致ならページ外にあり
return true;
}
return false;
}
}
})();


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

仕事の都合上、メールアドレスをWebに掲載しているため、毎日大量に迷惑メールがきます。迷惑メールフィルタでブロックするという手もありますが、せっかく大量に来るので、その情報を「迷惑メール相談センター」に提供することにしてみました。送信されてきた迷惑メールを添付して送ります。

・迷惑メール相談センター
< http://www.dekyo.or.jp/soudan/ihan/ >

・迷惑メールの送り先
meiwaku@dekyo.or.jp

一回きりだと効果がないので、毎日ひたすら「迷惑メールを迷惑メールセンターに送る」という地道な努力(?)を繰り返しました。その甲斐あって、ある日突然ほとんど迷惑メールが来なくなりました。

しかし、一週間もすると、突然大量の迷惑メールが。仕方ないので、また迷惑メールの情報を提供しつづけました。

すると今度は迷惑メール相談センターからメールが。どうも、地道に協力すると迷惑メール送信先(会社/法人)に対して何かやってくれるようです(これも、人数が多くないと駄目っぽい感じ)。

そして、また突然迷惑メールがほとんど来なくなりました。
でも、またすぐに大量にやってくるんだろうなあ、という気がします……。

・jQuery+jQuery UI+jQuery Mobile逆引きハンドブック
< http://www.amazon.co.jp/dp/486354149X >

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861 >

・D3.js例文辞典
< http://www.openspc2.org/reibun/D3.js/ >

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/ >

・Egison言語 例文辞典
< http://www.openspc2.org/reibun/Egison/3.3.2/ >

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

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

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/4844395955 >

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

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

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< https://www.ddc.co.jp/estore/cgi/item/start.cgi?m=DetailViewer&record_id=243 >
吉田印刷所の「印刷の泉」でも購入できるようになりました。