Illustrator CS3〜6編 文字と書体を同時に置換する

今回は、Illustratorのドキュメントで選択されたテキストの置換処理です。
単純に文字だけを置換するだけでなく、同時に書体も置換します。

とはいっても、いくつか制限があります。ひとつは置換前と置換後の文字数が1文字に限定されていることです。また、置換後の文字と置換前の文字で同じものがあるとうまくいきません。つまり、

------------------------
置換前 置換後
------------------------
A Z
B D
C E
------------------------

はOKですが、以下のような置換は駄目です。

------------------------
置換前 置換後
------------------------
A B
B C
C D
------------------------

実際のプログラムは以下のようになります。


// 複数文字置換&フォント設定
var data = [
{ src : "日", dst : "S", font: "Optima-Bold" },
{ src : "月", dst : "M", font: "Arial-Black" },
{ src : "火", dst : "T", font: "BookAntiqua-Bold" },
{ src : "水", dst : "W", font: "Garamond" },
{ src : "木", dst : "h", font: "Cochin" },
{ src : "金", dst : "F", font: "Courier" },
{ src : "土", dst : "a", font: "Futura-MediumItalic" } // 最後に,を付けないように!
];
var selObj = app.activeDocument.selection;
for(var i=0; i<selObj.length; i++){
var ptrList = [];
var fontList = [];
for(var j=0; j<data.length; j++){
var regSrc = new RegExp(data[j].src, "gm");
var repStr = data[j].dst;
var repFont = data[j].font;
selObj[i].contents = selObj[i].contents.replace(regSrc, function(str,ptr,allStr){
ptrList.push(ptr);
fontList.push(app.textFonts[repFont]); // 重要!!
return repStr;
});
}
// alert("フォントを置換します");
for(var p=0; p<ptrList.length; p++){
var fontName = fontList[p];
selObj[i].textRange.characters[ptrList[p]].characterAttributes.textFont = fontName;
}
}

置換前の文字と置換後の文字、書体を変更する場合は

{ src : "日", dst : "S", font: "Optima-Bold" },

が並んでいる部分を変更してください。srcが置換前の文字、dstが置換後の文
字、fontが置換後のフォントになります。

Illustratorではapp.textFonts[]でフォントを読む処理が非同期のため、フォ
ントの読み込みが間に合わない場合は正しく処理されません。もし、運悪くフ
ォントが置換されない場合は

// alert("フォントを置換します");

の//を削除してください。



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