Skip to main content
fukuoka00000
Participating Frequently
October 10, 2024
解決済み

Illustratorスクリプト(.jsx)でルビを作成。文字ツール(TextRange)で部分選択で実行できない。なぜ?

  • October 10, 2024
  • 返信数 2.
  • 1743 ビュー

タイトル通りですが、Illustratorスクリプト(.jsx)でルビを作成するスクリプトを作成しましたが、テキストプレームを選択してスクリプ実行できますが、文字ツール(TextRange)で部分選択でスクリプト実行がどうしてもできません。選択していないことになってしまします。
文字ツール(TextRange)で部分選択でスクリプト実行できるようにすにはどうすればよいですか?コード教えてください。
現在のPC環境

●mac os Monterey

●Illustrator2023

このトピックへの返信は締め切られました。
解決に役立った回答 Ten A

アドバイスありがとうございます。

そもそもTextRange選択でルビをつけることは可能でしょうか?
web上でもみかけませんが。。。。


やろうと思えばできます。ただし、難易度は非常に高いです。先にお伝えしたとおり親文字の位置の特定にはフレームからキャラクタまでの相対的な計算が必要になります。これをどのように取得していくのかというと、文字1つづつサイズと送り・変形率等などを総合的に勘案して位置を計算します。行揃えによっても位置は動きます。そういった計算の難易度が高い為スクリプトでやろうという人が見当たらないということです。

返信数 2

Ten A
Community Expert
Community Expert
October 10, 2024

textRangeにはジオメトリカルな情報は含まれません。親オブジェクトから辿らないとだめですね。

fukuoka00000
fukuoka00000作成者
Participating Frequently
October 10, 2024

アドバイスありがとうございます!

テキストだと認識してくれません。むずかしい!

monokano
Community Expert
Community Expert
October 10, 2024

むしろ、あなたが「必要最小限のシンプルなコード」を書いて見せる必要がありますよ。

そうすることで、そのコードのどこに改善点があるのかを第三者がはじめて指摘できます。

fukuoka00000
fukuoka00000作成者
Participating Frequently
October 10, 2024

すみません、コードを入れるのわすれてました。

↓文字ツール(TextRange)で部分選択です。

var textFrame = null;
var selectedText = null;

if (selection[0] && selection[0].typename === "TextFrame") {
textFrame = selection[0];
selectedText = textFrame.textRange;
} else if (selection[0] && selection[0].typename === "TextRange") {
selectedText = selection[0];
try {
textFrame = selectedText.parentStory.textFrames[0];
} catch (e) {
alert("選択されたテキストの親テキストフレームが見つかりませんでした。");
return;
}
} else {
alert("選択されたオブジェクトはテキストフレームではありません。");
return;
}

Ten A
Community Expert
Ten ACommunity Expert解決!
Community Expert
October 10, 2024

アドバイスありがとうございます。

そもそもTextRange選択でルビをつけることは可能でしょうか?
web上でもみかけませんが。。。。


やろうと思えばできます。ただし、難易度は非常に高いです。先にお伝えしたとおり親文字の位置の特定にはフレームからキャラクタまでの相対的な計算が必要になります。これをどのように取得していくのかというと、文字1つづつサイズと送り・変形率等などを総合的に勘案して位置を計算します。行揃えによっても位置は動きます。そういった計算の難易度が高い為スクリプトでやろうという人が見当たらないということです。