コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

048.【ID】テキストフレームで字取り設定をするときのあれ

文字を選択した状態で実行すると、
①親テキストフレームの座標を取得
②親テキストフレームをフレームグリッド化
③フレームグリッドのQ数設定を選択した文字のQ数に
④テキストフレームに戻す
⑤座標を元に戻す
を行う。

書いたコード

var doc = app.activeDocument;
var sel = doc.selection;

if (sel.lengh === 0 || sel[0].constructor.name !== 'Character') {
    alert('一文字選択してください');
    exit();
}
var tf = sel[0].parentTextFrames[0];
if (tf.parentStory.storyPreferences.frameType === FrameTypes.FRAME_GRID_TYPE) {
    alert('親テキストフレームがフレームグリッドです')
    exit();
}

var chaSize = sel[0].pointSize;
var tfSize = tf.geometricBounds;

tf.parentStory.storyPreferences.frameType = FrameTypes.FRAME_GRID_TYPE;
var tmp = tf.parentStory.properties
tf.parentStory.properties.gridData.pointSize = chaSize;
tf.parentStory.storyPreferences.frameType = FrameTypes.TEXT_FRAME_TYPE;
tf.geometricBounds = tfSize;

参考

追記

テキストフレーム内で字取り設定を行う場合、その幅はフレームグリッド時のグリッド書式属性に準ずる。
そのため、デフォルトのQ数以外のサイズで字取り設定をしたい場合は一度フレームグリッドに変換して設定を変更する必要がある。
「そういうものだ」と思って今まで作業してきたが、バッドノウハウのような気がしてきた。
例えばこのスクリプトの場合、同フレーム内の異なるQ数のテキストで複数回実行するとそのたびに幅が変わってしまう。
下記参考URLで紹介されているように、トラッキングで解決するのが最善なのかもしれない。
いんでざいんnoすくりぷとでトラッキングの数値を算出してくれるスクリプトが公開されている。
(参考:InD-Board 記事No.5611

 
追記の内容については、なんでやねんDTP/おぢんさん(@works014)にご指摘をいただきました!

ありがとうございます!🙇‍♂️