Blue-Screeeeeeen.net-youichi7imazekiの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]
    }
}


タグ:


  • 最近の投稿

  • カテゴリー

  • 月別の記事

  • 書籍など

    おことわり

     Adobe、InDesign、Illustrator、Photoshop、Acrobatは、Adobe Systems Incorporated(アドビシステムズ社)の米国および他の国における商標または登録商標です。本サイトでは、RおよびTMを省略しております。