Practice makes Perfect !

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

実験009_2022.10-1

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

昨日Twitterで呟いてみたんですけど、1行に納まっていない段落があるテキストフレームをドキュメント全体から探し出したいと思っていました。

どういうことかというと図のような感じです。

このように1段落1行で収まっていないテキストフレームを探し出したいのです。

名刺のお仕事が数千件入るというのですが、データ結合で展開した後の処理として、たとえばE-mailが長くて2行に跨いでしまうということがあると思います。そういうのを自動で1行に収めるというのをやりたいのです。

複数行に跨ぐ行を長体をかけて1行に収めるスクリプトについてはネットで検索すると出てくるので、今回は上記のように該当するテキストフレームを探し出すところまでをやってみます。
seuzo.net
sysys.blog.shinobi.jp


まず、考え方として「1段落1行で収まっていない」ということを「段落数と行数が一致していない」というように考えました。

paragraphs.length != lines.length
//段落数と行数の不一致


あとは特に問題ありませんでした。試しに作業中のドキュメントの1ページ目にあるテキストフレームで該当するものを黄色く塗りつぶすという処理は次の通り。

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

ドキュメント全体で処理するために次のようにしました。

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";
		}
	}
}

次回は該当テキストフレームの該当段落に対して処理を行るスクリプトについてまとめます。