Adobe Illustrator CS3/CS4/CS5編 テキストファイル内の文字を配置し保存する

今回はIllustratorでテキストファイル内の文字を配置し保存するスクリプトです(まあ昨年11月のネタの続き)。このスクリプトでは連番ファイルではなく1つのAIファイルとして保存します。また、テロップでphotoshop独自のエフェクトを施さない場合には、Illustratorで配置した後でPhotoshop形式として書き出した方が高速です。スクリプトの処理速度差が150倍ほどあります。テロップが大量にある場合にはIllustratorで配置した後でPhotoshop形式で書き出すのがよいでしょう。
以下のスクリプトは1つのレイヤーに複数のテキストフレームを生成するタイプです。必要な基本ファイルなどはこれまでと全く同じです。


// テキストファイル内の文字を配置し1つのAIファイルで保存する
(function(){
var aiFile = File.openDialog("基本となるAIファイルを選択してください","*");
if (!aiFile){ return; } // キャンセルされたら何もしない
var textFile = File.openDialog("配置するテキストファイルを選択してください","*.txt");
if (!textFile){ return; } // キャンセルされたら何もしない
var saveFile = File.saveDialog("保存するファイル名を入力してください");
if (!saveFile){ return; } // キャンセルされたら何もしない
var flag = textFile.open("r");
if (!flag){
alert("ファイルが読み込めません");
return;
}
app.open(aiFile);
var layObj = app.activeDocument.layers[0].textFrames[0]; // 一番上のレイヤーを指定
while(!textFile.eof){
var text = textFile.readln(); // 1行読み込む
layObj.contents = text;
layObj = app.activeDocument.layers[0].textFrames[0].duplicate();
}
activeDocument.saveAs(saveFile);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
})();

以下のスクリプトはPhotoshop形式に書き出す場合に使用してください。なお、スクリプトからPhotoshop形式に書き出せますが、レイヤー別に書き出すように設定しても反映されません。つまりスクリプトから書き出すとうまくいきません(CS3〜CS5いずれも同じ)。このため、手作業でファイルメニューから「書き出し...」を選択しPhotoshop形式でレイヤーを保持して保存してください。なぜか、これだとうまく保存されます(アピアランスが適用されている場合はアピアランスごと分割されます)。

// テキストファイル内の文字を配置し1つのAIファイルで保存する
(function(){
var aiFile = File.openDialog("基本となるAIファイルを選択してください","*");
if (!aiFile){ return; } // キャンセルされたら何もしない
var textFile = File.openDialog("配置するテキストファイルを選択してください","*.txt");
if (!textFile){ return; } // キャンセルされたら何もしない
var saveFile = File.saveDialog("保存するファイル名を入力してください");
if (!saveFile){ return; } // キャンセルされたら何もしない
var flag = textFile.open("r");
if (!flag){
alert("ファイルが読み込めません");
return;
}
app.open(aiFile);
var layObj = app.activeDocument.layers[0]; // 一番上のレイヤーを指定
var s = (new Date()).getTime();
while(!textFile.eof){
var text = textFile.readln(); // 1行読み込む
layObj.textFrames[0].contents = text;
layObj = app.activeDocument.layers.add();
var dup = app.activeDocument.textFrames[0].duplicate(layObj);
}
var e = (new Date()).getTime();
$.writeln((e-s)/1000+"秒");
activeDocument.saveAs(saveFile);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
})();

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