金曜日, 8月 30, 2024

JavaScriptでAI遊び 23 
選択テキストをバラバラに分割

選択テキストをバラバラに分割します。
縦書きにも対応しますが横書きも含めて処理出来るのは1行だけです。

// Illustratorスクリプト:
//選択したテキストを
//サイズと書式を保持したまま1文字ずつバラバラに

function splitTextKeepingOrientation() {
// Illustratorで何かが選択されているか確認
if (app.selection.length === 0) {
alert("テキストフレームを選択してください。");
return;
}

// 選択されたテキストフレームに対して処理を実行
for (var i = 0; i < app.selection.length; i++) {
var selectedItem = app.selection[i];

// テキストフレームであるかを確認
if (!(selectedItem instanceof TextFrame)) {
continue; // テキストフレームでない場合はスキップ
}

var textFrame = selectedItem;
var textRange = textFrame.textRange;
var textContent = textFrame.contents;
        // 横書きか縦書きかを取得
var orientation = textFrame.orientation;

// テキストフレームの位置を取得
var x = textFrame.position[0];
var y = textFrame.position[1];
var parent = textFrame.parent;

// 元のテキストフレームを削除
textFrame.remove();

// 各文字を個別のテキストオブジェクトとして追加
for (var j = 0; j < textContent.length; j++) {
var newTextFrame = parent.textFrames.add();
newTextFrame.contents = textContent[j];
        // 横書きか縦書きかを設定
newTextFrame.orientation = orientation;

// 元のテキスト属性をコピー
var sourceCharacterAttributes =
                textRange.characters[j].characterAttributes;
var newCharacterAttributes =
                newTextFrame.textRange.characterAttributes;
newCharacterAttributes.textFont =
                sourceCharacterAttributes.textFont;
newCharacterAttributes.size =
                sourceCharacterAttributes.size;
newCharacterAttributes.fillColor =
                sourceCharacterAttributes.fillColor;
newCharacterAttributes.tracking =
                sourceCharacterAttributes.tracking;

// 文字のサイズと書式に基づいて新しい位置を設定
newTextFrame.position = [x, y];

// 横書きか縦書きかによって位置を更新
if (orientation == TextOrientation.HORIZONTAL) {
x += newTextFrame.width; // 横書きの場合、x座標を更新
} else {
y -= newTextFrame.height; // 縦書きの場合、y座標を更新
}
}
}
}
splitTextKeepingOrientation();

こんな感じです。処理後に少し広がってしまいました。要改良?ですね。