フォント(書体)の指定

今回は書体(フォント)の処理を行ってみます。フォントは1文字ごとに指定できるので処理する場合には文字単位で行う必要があります。まずは、選択したテキストブロック内の先頭の1文字のフォントを表示させてみます。

sel = app.activeDocument.selection;
fntName = sel[0].characters[0].appliedFont;
alert(fntName.name);
alert(fntName.fontFamily);
alert(fntName.fontStyleName);

最初に表示されるのがフォント名、次がフォントファミリー名、最後がフォントスタイルになります。フォントスタイルは「小塚明朝 Std R」であれば「R」の部分になります。フォントはappliedFontに設定し、次に太さなどの設定をfontStyleに設定します。また、フォントは以下のようにしてフォントオブジェクトを指定します。

fntObj = app.fonts.item("フォント名");

フォント名は日本語で指定できます。Illustrator CSやPhotoshop CSでは英語でのフォント指定でしたが、InDesign CSでは日本語で指定できるので便利です。文字パレットに表示されるフォント名をコピーして利用するのがミスが少なくて安全でしょう。
 以下のスクリプトは選択された最初のテキストブロックの最初の1文字のフォントをヒラギノ角ゴ Pro W6に設定するものです。

fntObj = app.fonts.item("ヒラギノ角ゴ Pro");
sel = app.activeDocument.selection;
sel[0].characters[0].appliedFont = fntObj;
sel[0].characters[0].fontStyle = "W6";


以前、Illustrator CSでもやりましたが、以下のスクリプトは平仮名のみフォントを変更するものです。選択されたテキストブロック内の文字が平仮名であれば小塚明朝 Std Rにフォントを変更します。フォントのみの変更で、それ以外のスタイルなどは変更されません。

fntObj = app.fonts.item("小塚明朝 Std");
fntWeight = "R";
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(/[あ-ん|ぁ-ゎ]/);
if (result)
{
cObj.appliedFont = fntObj;
cObj.fontStyle = fntWeight;
}
}
}


InDesign CSでも正規表現を使うことができます。正規表現の部分は

result = cObj.contents.match(/[あ-ん|ぁ-ゎ]/);

です。平仮名を指定していますが、数字のみフォントを変更する場合は以下のようにします。

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

同様にアルファベットの場合は以下のようになります。

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


InDesignの場合は標準でフォント検索、チェック機能が付いていますが、スクリプトでも以下のようにして使用されているフォントを調べることができます。

sel = app.activeDocument.selection;
for (j=0; j<sel.length; j++)
{
selObj = sel[j];
for (i=0; i<selObj.characters.length; i++)
{
fntObj = selObj.characters[i].appliedFont;
fntName = fntObj.fontType;
if (fntName == FontTypes.truetype)
{
alert((1+i)+"文字目がTrueTypeフォントです");
}
if (fntName == FontTypes.bitmap)
{
alert((1+i)+"文字目がビットマップフォントです");
}
}
}


得られるフォントの種類には以下のようなものがあります。マニュアルはFontTypes.trueTypeになっていますが、マニュアルの間違いです。他にも大文字小文字が間違っているため、以下の指定でないと正しく認識されません。

FontTypes.type1
FontTypes.truetype
FontTypes.cid
FontTypes.atc
FontTypes.ocf
FontTypes.opentypeCFF
FontTypes.opentypeCID
FontTypes.opentypeTT

InDesign CSのスクリプトは結構いろいろできますので、活用すれば効率的な仕事ができるかもしれません。かもしれないだけで、仕事によっては全くメリットがないこともあります。InDesign自体が、かなり後発のソフトであるため、必要な機能が最初から盛り込まれています。どうしても、スクリプトでないとできない処理は少ないのかもしれません。




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