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

今回はIllustratorでテキストファイル内の文字を配置し保存するスクリプトです(ネタの使い回しと言えば使い回しなんですが)。Illustratorの場合もあらかじめ基本となるAIファイルを作成しておきます。この時に一番上のレイヤーにはポイントテキストを作成して位置決めや文字サイズ、行揃えを行っておきます。その他のレイヤーには図形や文字など何を配置しても問題ありません。一番上のレイヤーだけ1つのポイントテキストがあれば動作します。


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

指定した範囲内に調整して配置したい場合は以下のようになります。Illustratorの場合、widthプロパティに表示サイズを入れるという方法もありますが、それだと文字が左揃えでなければ正しく動作しないので以下のスクリプトでは1文字ずつ文字幅を調整しています。このため、文字数が多くなると誤差などの関係で指定した幅よりも文字がはみ出してしまいます。範囲指定の値を小さめにしてから実行してもらうのがよいかと思います。

// テキストファイル内の文字を調整して配置し連番AIファイルで保存する
(function(){
var aiFile = File.openDialog("基本となるAIファイルを選択してください","*");
if (!aiFile){ return; } // キャンセルされたら何もしない
var textFile = File.openDialog("配置するテキストファイルを選択してください","*.txt");
if (!textFile){ return; } // キャンセルされたら何もしない
var saveFolder = Folder.selectDialog("保存先のフォルダを選択してください");
if (!saveFolder){ return; } // キャンセルされたら何もしない
var count = 0; // ファイル番号
var flag = textFile.open("r");
if (!flag){
alert("ファイルが読み込めません");
return;
}
var maxSize = 720; // 最大ポイント数
while(!textFile.eof){
app.open(aiFile);
var text = textFile.readln(); // 1行読み込む
var layObj = app.activeDocument.layers[0]; // 一番上のレイヤーを指定
layObj.textFrames[0].contents = text;
var d = layObj.textFrames[0].width;
if (d >= maxSize){ // オーバーフローしている
$.writeln("d="+maxSize / d);
for(var j=0; j<layObj.textFrames[0].characters.length; j++){
layObj.textFrames[0].characters[j].horizontalScale = 100 * (maxSize / d);
}
}
var saveFile = new File(saveFolder.fullName+"/telop"+count+".ai"); // telop番号.aiという名前で保存する
activeDocument.saveAs(saveFile);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
count++;
}
})();
表示範囲は以下の行の720の値を変更してください。

var maxSize = 720; // 最大ポイント数


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