1行に収まっていない段落があるテキストフレームを探し出したい
昨日Twitterで呟いてみたんですけど、1行に納まっていない段落があるテキストフレームをドキュメント全体から探し出したいと思っていました。
正規表現やスクリプトで図のように1行に納まっていない行があるテキストフレームをドキュメント全体で検索して表示する方法ってありますかね…#InDesign#ExtendScript
— PMP (@PmP96079998) 2022年10月12日
どういうことかというと図のような感じです。
このように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"; } } }
次回は該当テキストフレームの該当段落に対して処理を行るスクリプトについてまとめます。