【InDesign】選択したテキストフレームにそれぞれ、1行ずつテキストを読み込む | Blue-Scre{7}n.net | よそいちのDTPメモ

トップページ » InDesign » 【InDesign】選択したテキストフレームにそれぞれ、1行ずつテキストを読み込む

【InDesign】選択したテキストフレームにそれぞれ、1行ずつテキストを読み込む

公開日:2017年4月21日 

選択したテキストフレームにそれぞれ、1行ずつテキストを読み込む

 「テキスト支給なし」「キャプチャに引き出し線テキストが必要」という体裁が多い書籍への対策として、「1.選択したテキストフレームひとつずつに」→「2.読み込んだ.txtファイルから1行ずつ」→「3.テキストフレームに配置する」の手順でテキストを流すスクリプトです。テキストフレームに配置する順序は上から順にざっくりと。

 「テキストが支給されていない」という条件がある以上、入力だけは手でやらないといけませんが、何より面倒なのはその後のコピペ地獄なので、これで少しは楽になる…(といいな)

スクリプト本文

//選択オブジェクトの処理順並び替え
function sortselObj(a, b){
  var y1 = a.visibleBounds[0];
  var x1 = a.visibleBounds[1];
  var y2 = b.visibleBounds[0];
  var x2 = b.visibleBounds[1];
  if (y1 > y2) {
    return 1;
  } else if (y1 < y2) {
    return -1;
  } else if (y1 == y2) {
    return 0;
  }
}
////////////
//ファイルを読み込む
var DocPath = app.activeDocument.filePath;
var DocPathdec =decodeURI(DocPath);//パスを読めるように変換
var path=new File(DocPathdec)
var readfile=path.openDlg("テキストファイルを指定してください","*.txt");
var filename = readfile;
var fileObj = new File(filename);
var TX = new Array();
fileObj.open("r"); // 読み込みモード
while(!fileObj.eof) {
  TX.push(fileObj.readln());
}
fileObj.close();
//////////////
var selCount=app.activeDocument.selection.length;
if((TX.length==selCount)||(TX.length>selCount)){//フレーム数とテキスト行数が一致する、またはテキストの方が多い場合
    for(var i = 0; i < selCount; i++){
    var selObj = app.activeDocument.selection;
    selObj.sort(sortselObj)//配列の順序を替える
    selObj[i].contents=TX[i]
    }
}
if(TX.length < selCount){//フレーム数の方がテキストより多い場合
    for(var i = 0; i < TX.length; i++){
    var selObj = app.activeDocument.selection;
    selObj.sort(sortselObj)//配列の順序を替える
    selObj[i].contents=TX[i]
    }
}
}


タグ:


広告