忍者ブログ

ぼんぷろぐ

InDesignとかイラレとかのスクリプトよもやま話

新しいブログに引っ越しました。

こちらのブログはもう更新しませんが、コメント欄は生きてますので疑問、ご指摘などありましたらどうぞ。

[InDesign]
文字の水平・垂直比率を一律X倍するスクリプト


 範囲テキスト、テキストフレーム、テキストフレームを含むグループ、または表のセル選択を選択して実行します(複数選択可)。
 たとえば水平比率×=200%を指定すると、今の水平比率が100%のとこは200%に、70%のとこは140%になります。

※「1文字ずつ処理」をONにすると長文ではクッソ重くなりますが、正規表現スタイルで水平・垂直比率を変えてる場合はONにする必要があります。TextStyleRangeが正規表現スタイルを考慮してくれないので仕方ない。
 調べてないですが先頭文字スタイルもおそらく同じです。

ダウンロード

[水平垂直比率に乗算 ver1.01]

(ver1.0→1.01 「整数値にする」オフ時の挙動がなんかおかしかったので修正)

以下ソース

if (app.scriptPreferences.version>=7) {
    app.doScript(main,ScriptLanguage.JAVASCRIPT,[],UndoModes.ENTIRE_SCRIPT);
} else {
    main();
}
function main(){
    var SelTexts=getTextObjs(app.activeDocument.selection);
    if (SelTexts.length==0) return;
    var myDiag=app.dialogs.add({name:"水平垂直比率に乗算.jsx"});
    try {
        with (myDiag.dialogColumns.add()) {
            with (dialogRows.add()){
                staticTexts.add({staticLabel:"垂直比率×="});
                percentEditboxes.add({editValue:100});
            }
            with (dialogRows.add()){
                staticTexts.add({staticLabel:"水平比率×="});
                percentEditboxes.add({editValue:100});
            }
            checkboxControls.add({staticLabel:"整数値にする(切り捨て)",checkedState:true});
            checkboxControls.add({staticLabel:"1文字ずつ処理(※正規表現スタイル使用時)",checkedState:false});
        }
        if (!myDiag.show()) throw "";
        var VScale=myDiag.dialogColumns[0].dialogRows[0].percentEditboxes[0].editValue;
        var HScale=myDiag.dialogColumns[0].dialogRows[1].percentEditboxes[0].editValue;
        var Seisu=myDiag.dialogColumns[0].checkboxControls[0].checkedState;
        var mojigoto=myDiag.dialogColumns[0].checkboxControls[1].checkedState;

        if (Seisu) {
            for (var i=0;i<SelTexts.length;i++){
                if (SelTexts[i].contents=="") continue;
                var myTextStyleRanges=mojigoto?SelTexts[i].characters.everyItem().getElements():SelTexts[i].textStyleRanges.everyItem().getElements();
                if (!mojigoto) myTextStyleRanges[myTextStyleRanges.length-1]=SelTexts[i].parent.characters.itemByRange(myTextStyleRanges[myTextStyleRanges.length-1].characters[0],SelTexts[i].characters[-1]).getElements()[0];
                if (VScale!=100) {
                    for (var j=0;j<myTextStyleRanges.length;j++) {
                        myTextStyleRanges[j].verticalScale=parseInt(myTextStyleRanges[j].verticalScale*VScale/100);
                    }
                }
                if (HScale!=100) {
                    for (var j=0;j<myTextStyleRanges.length;j++) {
                        myTextStyleRanges[j].horizontalScale=parseInt(myTextStyleRanges[j].horizontalScale*HScale/100);
                    }
                }
            }
        } else {
            for (var i=0;i<SelTexts.length;i++){
                if (SelTexts[i].contents=="") continue;
                var myTextStyleRanges=mojigoto?SelTexts[i].characters.everyItem().getElements():SelTexts[i].textStyleRanges.everyItem().getElements();
                if (!mojigoto) myTextStyleRanges[myTextStyleRanges.length-1]=SelTexts[i].parent.characters.itemByRange(myTextStyleRanges[myTextStyleRanges.length-1].characters[0],SelTexts[i].characters[-1]).getElements()[0];
                if (VScale!=100) {
                    for (var j=0;j<myTextStyleRanges.length;j++) {
                        myTextStyleRanges[j].verticalScale*=VScale/100;
                    }
                }
                if (HScale!=100) {
                    for (var j=0;j<myTextStyleRanges.length;j++) {
                        myTextStyleRanges[j].horizontalScale*=HScale/100;
                    }
                }
            }
        }
    } catch (e) {
        if (e!="") alert(e);
    } finally {
        myDiag.destroy();
    }

    function getTextObjs(Objs) {
        var TextObjs=[];
        for (var n=0;n<Objs.length;n++){
            if (Objs[n].constructor.name=="Table") {
                TextObjs=TextObjs.concat(Objs[n].cells.everyItem().texts[0].getElements());
            } else if (Objs[n].hasOwnProperty("texts")) {
                TextObjs=TextObjs.concat(Objs[n].texts.everyItem().getElements());
            } else if (Objs[n].constructor.name=="Group") {
                TextObjs=TextObjs.concat(getTextObjs(Objs[n].pageItems.everyItem().getElements()));
            }
        }
        return TextObjs;
    }
}
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

プロフィール

kawamoto_α
(あるふぁ(仮))


InDesignで新聞組版のようなことをしています。

ツイッタ

※ブラウザによっては当ブログからDLしたzipファイルが拡張子なしになることがあるようですが、.zipを補って開いてください。



イラレ用トーンカーブスクリプト(¥1500)



クロソイド式角丸長方形スクリプト(¥500)
Illustrator用
InDesign用



イラレスクリプトをキーボードショートカットで実行するやつ(Win用)