Illustratorの超小ネタ #3 コピペ380回をやめる。Illustrator スクリプトで名前を一括配置する方法
INDEX
コピペ380回をやめる。Illustrator スクリプトで名前を一括配置する方法

Illustratorで同じデザインを大量に作るとき、地味に大変なのが文字の差し替えです。
今回の制作では、約380人分の名前を、それぞれ別のアートボードに配置する必要がありました。
1人ずつ名前をコピーして、貼り付けて、次のアートボードへ移動して……。
380回やることを考えると、さすがにこれは自動化したい。
そこで、txtファイルに用意した名前をIllustratorの各アートボードへ自動で流し込むスクリプトを作ってみました。
やりたかったこと
今回やりたかったのは、こんな処理です。
- 1枚目のアートボードに名前用テキストを配置
- txtファイルに名前を1行ずつ用意
- 1行目 → アートボード1
- 2行目 → アートボード2
- 3行目 → アートボード3……
- フォント・サイズ・色は元のテキストをそのまま使う
- 各アートボードの同じ位置へ配置する
例えばtxtファイルはこんな感じです。
山田 太郎
田中 一郎
佐藤 花子
鈴木 次郎
これを読み込むと、名前が順番に各アートボードへ配置されます。(このファイルは100名)

スクリプトはAIに相談しながら作った
今回、自分でExtendScriptを一から書いたわけではありません。
最初はGoogleのAIモードに、
同じファイル内で流し込み イラレ
という、かなりざっくりした内容で相談しました。
最初はCSVなどを使ったデータ差し込み方法が出てきたのですが、今回やりたいこととは少し違ったので、
テキストで複数のアートボードに流し込みたい
と条件を追加。
そこで、Illustratorのスクリプトを使う方法が出てきました。
さらに、
イラレ スクリプトファイル 形式 テキストエディット
と聞きながら、Macのテキストエディットで.jsxファイルを作る方法を確認。
実際に作ってみると、
.jsxファイルが読み込めない
という問題も発生したので、標準テキストになっているか、.jsx.txtという二重拡張子になっていないかなどを確認しながら進めました。


実際に動かすとError 24
.jsxファイルとして実行できるようになっても、一発では動きませんでした。
最初のコードでは、テキストファイルを読み込む部分が、
file.readLine()
となっていたため、IllustratorでError 24が発生。
実際の画面では、
「file.readLine が関数ではありません」
と表示されました。

ExtendScriptでは、
file.readln()
を使う必要があります。
似ていますが、
readLine()
ではなく、
readln()
です。
ここを修正すると、正常に読み込めるようになりました。
さらに、UTF-8のtxtファイル対策として、
line = line.replace(/^\uFEFF/, "");
も追加しています。
完成版では、UTF-8指定、readln()での読み込み、BOM除去まで入れています。
1枚目の位置を、そのまま他のアートボードへ
今回便利だったのが、1枚目に置いたテキストの位置を基準にしていることです。
1枚目のアートボード左上からテキストまでの距離を取得し、その位置関係を2枚目以降にも使っています。
var offsetX = baseText.left - firstRect[0];
var offsetY = baseText.top - firstRect[1];
2枚目以降では、その距離を各アートボードに適用します。
targetText.left = rect[0] + offsetX;
targetText.top = rect[1] + offsetY;
そのため、最初のアートボードで位置を決めておけば、あとは各アートボードの同じ位置へ自動で配置されます。
元のテキストオブジェクトを複製するので、フォント・文字サイズ・色なども引き継がれます。
Illustratorでの使い方
使い方はシンプルです。
1. アートボードを用意する
まず、必要な数のアートボードを用意します。
今回の場合は、名前を入れたい人数分のアートボードを作成しました。
2. 1枚目に名前用テキストを配置する
1枚目のアートボードに、名前を入れるためのテキストオブジェクトを配置します。
フォント、文字サイズ、文字色、位置などもここで設定しておきます。
3. txtファイルを用意する
名前を1行につき1人ずつ入力したtxtファイルを用意します。
文字コードはUTF-8で保存します。
山田 太郎
田中 一郎
佐藤 花子
鈴木 次郎
4. 基準になるテキストを選択する

Illustrator上で、1枚目に配置した名前用のテキストオブジェクトを選択します。
ここが結構大事です。
テキストを選択した状態でスクリプトを実行します。
5. スクリプトを実行する
Illustratorのメニューから、
「ファイル」→「スクリプト」→「その他のスクリプト…」
を選択します。
そこで、ダウンロードした
illustrator-name-auto-place.jsx
を選びます。
すると、流し込むtxtファイルを選択する画面が表示されます。
6. txtファイルを選択する
先ほど用意したtxtファイルを選択すると、
1行目 → アートボード1
2行目 → アートボード2
3行目 → アートボード3……
という順番で、自動的に名前が配置されます。
約380人分でも、1件ずつコピペする必要はありません。
こんなものにも使えそう
今回は参加者名で使いましたが、仕組みとしてはかなりシンプルなので、
- 名札
- 賞状
- 認定証
- 社員名
- 会社名
- 商品名
- ゼッケン
- 複数店舗用のPOP
など、デザインは同じで文字だけ変わる制作物なら応用できそうです。
名前+No.のように、複数項目を同時に流し込めるようにしても便利そうです。
スクリプトをダウンロード
今回使用したIllustrator用スクリプトを、ダウンロードできるようにしました。
ZIPファイルには、
illustrator-name-auto-place.jsxREADME.txt
を入れています。
READMEにも使い方と注意点をまとめています。
▼ スクリプトをダウンロード
[Illustrator 名前一括流し込みスクリプトをダウンロード]
ご利用について
このスクリプトは、HUKの実際の制作業務で使用したものをもとに公開しています。
Illustratorのバージョンや制作データの構成によっては、正常に動作しない場合があります。
また、名前の長さによって文字がデザインからはみ出す場合もあるため、流し込み後は必ず内容を確認してください。
スクリプトを実行する前に、元のIllustratorデータを保存・バックアップしておくことをおすすめします。
本スクリプトの使用によって生じたデータの破損・消失、その他の不具合については責任を負いかねますので、あらかじめご了承ください。
コードを書けなくても、自動化できる
今回一番面白かったのは、最初からスクリプトの知識があったわけではないことです。
最初の相談は、
同じファイル内で流し込み イラレ
くらいのところから始まっています。
そこから、
「テキストで読み込みたい」
「複数のアートボードに入れたい」
「元の文字設定を使いたい」
「同じ位置に置きたい」
と、やりたいことを少しずつ具体的にしていきました。
AIに聞く → Illustratorで試す → エラーを見る → また直す。
その繰り返しで、実際の制作に使えるところまで持っていけました。
単純作業はできるだけ機械に任せて、その分、デザインを考える時間に使う。
こういう小さな自動化は、これからもいろいろ試してみたいと思います。