文字の処理(サイズとカラー)

今回はInDesign CSのテキストフレーム内の文字の処理を行ってみましょう。
まず、選択されたテキストフレーム内の文字が数値の場合に文字サイズを24にするものです。単位を省略した場合は環境設定で指定したものになります。

repStr = "0123456789";
sel = app.activeDocument.selection;
for (j=0; j<sel.length; j++)
{
selObj = sel[j];
for (i=0; i<selObj.characters.length; i++)
{
cObj = selObj.characters[i];
if (repStr.indexOf(cObj.contents) > -1)
{
cObj.pointSize = 24;
}
}
}

数字でなく任意の1文字にしたい場合には一番先頭の行のrepStr = "0123456789";の"と"の間を変更してください。単位を付ける場合は以下のように"〜"または'〜'で囲んで指定します。

cObj.pointSize = "24mm";


指定文字サイズでなく、現在の文字サイズより若干小さくしたい、大きくしたい場合もあります。以下のスクリプトは数字とアルファベットのAからZまでの文字を現在のフォントサイズよりも2小さいサイズにするものです。(これも単位は環境設定で指定したものになります)

sel = app.activeDocument.selection;
for (j=0; j<sel.length; j++)
{
selObj = sel[j];
for (i=0; i<selObj.characters.length; i++)
{
cObj = selObj.characters[i];
result = cObj.contents.match(/[0-9|a-z]/i);
if (result)
{
p = cObj.pointSize;
cObj.pointSize = p - 2;
}
}
}

最初のスクリプトと違って数字とアルファベットかどうかを調べるのに正規表現を使っています。正規表現は

result = cObj.contents.match(/[0-9|a-z]/i);

の行です。この/と/の間にある部分を変更することができます。数字のみの場合は以下のようになります。

result = cObj.contents.match(/[0-9]/);

アルファベットの大文字のみの場合は以下のようになります。

result = cObj.contents.match(/[A-Z]/);

大文字と小文字の場合は以下のようにiを付けます。

result = cObj.contents.match(/[a-z]/i);


文字のカラーも設定することができます。設定する前にどんなカラー値が設定されているか調べるスクリプトが以下のものです。

sel = app.activeDocument.selection;
for (j=0; j<sel.length; j++)
{
selObj = sel[j];
for (i=0; i<selObj.characters.length; i++)
{
n = selObj.characters[i].fillColor.space;
if (n == ColorSpace.rgb) colType = "RGB";
if (n == ColorSpace.cmyk) colType = "CMYK";
if (n == ColorSpace.lab) colType = "Lab";
if (n == ColorSpace.mixedInk) colType = "MIX";
col = selObj.characters[i].fillColor.colorValue;
alert(colType+" : " + col);
}
}


InDesign CSでは、いくつかのカラーの種類を指定することができます。設定できるのはRGB、CMYK、Lab、グラデーションになります。
以下のスクリプトは数字の場合に赤色にするものです。

repStr = "0123456789";
setColor = [0, 100, 100, 0];
nCol = app.activeDocument.colors.add({model:ColorModel.process, space:ColorSpace.cmyk,colorValue:setColor});
sel = app.activeDocument.selection;
for (j=0; j<sel.length; j++)
{
selObj = sel[j];
for (i=0; i<selObj.characters.length; i++)
{
cObj = selObj.characters[i];
if (repStr.indexOf(cObj.contents) > -1)
{
cObj.fillColor = nCol;
}
}
}

2行目がカラーの設定になります。CMYKの順番で指定しています。4つの値を変更すればカラーを指定できます。設定できる値は0〜100になります。単位はパーセント(%)になります。
カラーを変えたい文字を指定するには1行目の"と"の間に文字を指定してください。日本語を扱う場合にはUnicodeにしてください。他の文字コードでは正しく動作しません。




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