Practice makes Perfect !

ExtendedScript素人です。同じ境遇の方、一緒に脱素人を目指しましょう!

実験009_2022.10-1-2

1行に収まっていない段落があるテキストフレームを探し出し、該当する段落を1行に収める

前回は該当するテキストフレームを探し出して黄色で塗りつぶすというところまでまとめました。
今回はその該当テキストフレームの中を覗いていくスクリプトです。

前回のスクリプトはこちら。

var doc = app.activeDocument;
var PG = doc.pages;
for(var i=0; i<PG.length; i++){ //ドキュメント全体で処理
	var TF = PG[i].textFrames;
	for(var j=0; j<TF.length; j++){ //全てのテキストフレームを対象に
		if(TF[j].paragraphs.length !=TF[j].lines.length){
		//対象のテキストフレームの段落数が行数と一致しない時
		// =1行で収まっていない という考え
		TF[j].fillColor="Yellow";
		}
	}
}

上記の

TF[j].fillColor="Yellow";

の部分を変えていきます。
該当するテキストフレームの中で「1段落の長さが1行でないときその段落を選択する」というスクリプトは次の通り。

var HIT = TF[j]; //該当するテキストフレームをHITという変数に代入
var HIT_P = HIT.paragraphs;
for(var k= 0; k<HIT_P.length; k++){
	if(HIT_P[k].lines.length !=1){
	//HIT(テキストフレーム)の中で1段落の長さが1行でないとき
	//その段落を選択する
		HIT_P[k].select();
	}
}


そうすると図のように、該当する段落が選択された状態になります。

あとはこれを長体をかけてくれて1行に収めてくれるスクリプトを書けば、ドキュメント全体で自動で処理してくれます。

まとめのスクリプトはこんな感じです。

var doc = app.activeDocument;
var PG = doc.pages;
for(var i=0; i<PG.length; i++){ //ドキュメント全体で処理
var TF = PG[i].textFrames;
	for(var j=0; j<TF.length; j++){ //全てのテキストフレームを対象に
	if(TF[j].paragraphs.length !=TF[j].lines.length){
		//対象のテキストフレームの段落数が行数と一致しない時
		// =1行で収まっていない という考え
	var HIT = TF[j]; //該当するテキストフレームをHITという変数に代入
	var HIT_P = HIT.paragraphs;
		for(var k= 0; k<HIT_P.length; k++){
		if(HIT_P[k].lines.length !=1){
		//HIT(テキストフレーム)の中で1段落の長さが1行でないとき
		//その段落を選択する
		HIT_P[k].select();
				
		//ここに「選択テキストに長体をかけて1行で収めるスクリプト」を
		//書きます
						
		}
		}
	}
	}
}

「選択テキストに長体をかけて1行で収めるスクリプト」については前回リンク貼っておきましたがここにも貼っておきます。
seuzo.net
sysys.blog.shinobi.jp
せうぞー (id:seuzo) さん、kawamoto_α(あるふぁ(仮)) さん、ありがとうございます。

ちなみに今回紹介したわたしの書いたスクリプト、オーバーセットテキストには非対応でした(´;ω;`)

あとこちらに自分でもまとめてました。
p-makes-p.hatenablog.com