選択されているテキストに長体をかけて1行に収めます。想定されている操作は以下の通りです。

  • テキストフレームを選択し、最初の段落が1行に収まるまで文字を変形します。複数のフレームを選択していても、さらにテキストフレーム以外のものが含まれていても実行可能です。
  • 1行に収めたい複数行のテキストを選択して文字を変形します。すでに1行に収まっている部分を選択している場合は何も実行されません。
  • 横組み、縦組みともに対応しています。
  • デフォルトでは扁平率が50%までで収まらなかった場合は元の値に戻すというリミッターがかかっています。

 

頭の部分にある変数を変更して仕様を変更することができます。

  • g_ajust:このスクリプトは文字に変形を少しづつかけて、1行に収まったところで処理を終了します。この値はその1回あたりの調整量です。デフォルトでは「1(%)」になっています。
  • g_minimumScale:文字の扁平率をどこまで許可するかというリミッターの値です。デフォルトでは「50(%)」になっています。

 

//選択したテキストに長体をかけて1行に収める
//(c)2016 Nakatoji 1000p

//-------------------------------------------------------
// 設定値(グローバル)
//-------------------------------------------------------
var g_ajust= 1; //調整量(%)
var g_minimumScale= 50; //最小の扁平率(リミッター)

//-------------------------------------------------------
// テキスト変形処理関数
//-------------------------------------------------------
function scalingText(obj) {
    if (obj.lines.length==1) {return;} //すでに1行なら処理せず
    //組方向によって変形対象プロパティを決定
    var targetProp; //変形対象プロパティ収納用
    if (obj.parentStory.storyPreferences.storyOrientation==StoryHorizontalOrVertical.HORIZONTAL) {
        targetProp= 'horizontalScale'; //水平スケール
    } else {
        targetProp= 'verticalScale'; //垂直スケール
    }
    //リミッター以上の扁平率ならループ
    var oldScale= obj[targetProp]; //リミッターを超えた場合にに元に戻す値
    while (obj[targetProp]>=g_minimumScale) {
        obj[targetProp]= obj[targetProp] -g_ajust; //調整量の分だけスケールを変形
        if ( obj.lines.length==1) {return;} //1行に収まったら終了
    }
    obj[targetProp]= oldScale; //リミッターを超えたので設定を元に戻す
    return;
}

//-------------------------------------------------------
// メイン
//-------------------------------------------------------
var selObj= app.activeDocument.selection; //選択されているオブジェクト
//オブジェクトの回数だけループ
for (var i=0; i<selObj.length; i++) {
    var targetObj=undefined; //処理対象オブジェクトリセット
    var constName= selObj[i].constructor.name; //オブジェクトタイプ
    if (constName=='TextFrame') {
        //テキストフレームの場合
        targetObj= selObj[i].texts[0].paragraphs[0]; //最初の段落のみ抽出
    } else {
        //テキストフレーム以外
        var targetStr= 'Character, Word, TextStyleRange, Paragraph, TextColumn'; //実行は対象とするオブジェクト(Textは書かなくても結果的にひっかかる)
        if ( targetStr.match(constName) ) {
            //段落をまたいで選択していた場合は不可
            if (selObj[i].paragraphs.length==1) { targetObj= selObj[i];}
        }
    }
    if (targetObj !=undefined ) { scalingText(targetObj); } //targetObjが空でなければ実行
}

 

 

 

Joomla templates by a4joomla