テキストのオーバーフローチェック

今回はテキストフレームのオーバーフローをチェックするスクリプトです。InDesign CSはテキストフレーム内に文字を流し込みますが、ボックス内に入り切らない場合はボックスの最後に+マークを表示してテキストの続きがある事を示してくれます。しかし、何ページにも渡って存在するテキストフレームのオーバーフローチェックを確認するのは面倒です。
以下のスクリプトは選択したテキストフレーム内のテキストがオーバーフローしているかどうかチェックしオーバーフローしている場合は、該当するフレームの先頭8文字分を表示し警告するものです。

sel = app.activeDocument.selection;
for (i=0; i<sel.length; i++)
{
if(sel[i].overflows == true)
{
alert(sel[i].contents.substring(0,8)+"...で始まるテキストフレームがオーバーフローしています!");
}
}


これは選択したテキストフレームのみなのでページ数が多い場合には、まとめて選択したりしなければいけません。まとめて選択した場合でも何ページ目かが示されないため手作業で確認することになってしまいます。
まず、ページ数を確認しなければなりません。ドキュメントの総ページ数は以下のスクリプトになります。実行すると総ページ数を表示します。

sel = app.activeDocument.pages;
alert(sel.length);

次にテキストフレームの数を調べる必要があります。テキストフレームはドキュメント全体とページ単位で調べることができます。以下のスクリプトを実行するとドキュメント全体のテキストフレーム数と2ページ目のテキストフレーム数を表示します。

sel = app.activeDocument.textFrames;
alert(sel.length);
sel = app.activeDocument.pages[1].textFrames;
alert(sel.length);


これで準備OK。あとはページ数分だけ繰り返し、さらにそのページ内にあるテキストフレームの数だけ繰り返しオーバーフローをチェックします。以下のスクリプトを実行すると全ページのテキストフレームを調べ、オーバーフローしている場合はページ数と先頭8文字までの内容を警告表示します。

pageObj = app.activeDocument.pages;
for (j=0; j<pageObj.length; j++)
{
for (i=0; i<pageObj[j].textFrames.length; i++)
{
tfObj = pageObj[j].textFrames[i];
if(tfObj.overflows == true)
{
alert((1+j)+"ページの"+tfObj.contents.substring(0,8)+"...で始まるテキストフレームがオーバーフローしています!");
}
}
}


あと、おまけスクリプトです。以下のスクリプトは選択されたテキストフレーム内に注意の文字がある場合に【注意】に一括変更するものです。ただし、フォントなど何も指定していない最初の状態で実行してください。

sel = app.activeDocument.selection;
for (i=0; i<sel.length; i++)
{
result = sel[i].contents.replace(/注意/g,"【注意】");
sel[i].contents = result;
}

検索/置換機能があるので得に必要なさそうですが、正規表現で指定できるので複雑な条件にマッチした場合のみ処理させることができます。




[サンプルをダウンロード]