忍者ブログ

ぼんぷろぐ

InDesign、イラレ、フォトショ(CS6 Win)の勉強中。。。(旧まとめいみブログ)

[InDesign]
フレームを選択すると画像がセンタリングされてるか表示してくれるスクリプト

画像フレームを選択すると、中の画像がフレームの縦横中央にそれぞれ配置されてるかどうかをパレット(※1)に表示してくれるスクリプトです。

※1 パレットとはScriptUIで作るウインドウのうち、常に親アプリのウインドウより手前に表示され、アプリをモーダル(入力待ち)状態にはしないものです。「ドッキング可能なパネル」ではありません。



AJABONさんのお題にのっかって作ってみたものです。AJABONさん自身がスクリプト書きなので、必要な要素は適宜書き足して使ってくれるだろうということでかなりシンプルな作りになってます。実用にするなら複数選択時の処理とか中身の画像を選択したときの処理とかを追加しないと使いづらいでしょう。

そんな中途半端なスクリプトですが、「選択アイテムに関する情報をパレットに表示するスクリプト」の例として見るとかなり応用範囲が広いし、それ系のスクリプトが公開されてるのを見たことがないのでせっかくだから記事にしておきました。

#targetengine "testestest"
var w0=new Window("palette");
var tate=w0.add("statictext",undefined,"縦:?")
var yoko=w0.add("statictext",undefined,"横:?")
var ev0=app.addEventListener("afterSelectionChanged", function(ev){
   try{
    var sel=ev.target.selection;
    if (sel.length==1 && sel[0].hasOwnProperty("graphics")  && sel[0].graphics.length==1){
        var c0=checkCenter(sel[0]);
        tate.text=c0[0]?"縦:◯":"縦:×";
        yoko.text=c0[1]?"横:◯":"横:×";
    } else {
        tate.text="縦:?";
        yoko.text="横:?";
    }
    }catch(e){}
})
w0.onClose=function(){ev0.remove()}
w0.show()
function checkCenter(frame){
    var g0=frame.graphics[0];
    var vb1=frame.visibleBounds;
    var vb2=g0.visibleBounds;
    return [Math.pow((vb1[2]+vb1[0])-(vb2[2]+vb2[0]),2)<0.01,Math.pow((vb1[3]+vb1[1])-(vb2[3]+vb2[1]),2)<0.01];
}

PR

[InDesign]
テキストの右クリックメニューに「字形」を追加するスクリプト




InDesignの字形パネルメニューにある『JIS90字形』『等幅半角字形』などを、テキスト選択時のコンテキストメニュー(右クリックメニュー)から使えるようにするスクリプトです。

//@target "indesign"
var s1 = app.menus.item("文字のコンテキストメニュー").submenus.item("字形");
if (s1.isValid) {
    s1.remove();
} else {
    s1 = app.menus.item("文字のコンテキストメニュー").submenus.add("字形");
    var s2 = app.menus.item("字形パネルメニュー");
    for (var i = 2; i < 15; i++) s1.menuItems.add(s2.menuItems[i].associatedMenuAction);
}

上記スクリプトをInDesignのスクリプトパネルかExtendScript toolkitで1回だけ実行してください。テキストのコンテキストメニューに「字形」が追加されます。消したいときは同じスクリプトをもう一回実行します。


※「字形パネルメニュー」の3項目目~15項目目(サブメニューは含まない)を、「文字のコンテキストメニュー」の下に作った「字形」サブメニューにコピーするという手抜きスクリプトです。ですのでバージョンアップにより字形パネルメニューの順番が変わってたら使えなくなります。
※CS6で開発しています。CCでダメだったらお知らせください。

[InDesign]
源ノ明朝の全グリフ表示するやつ(InDesign+ESTK版)

var sss="""(function(cid){
    var idms1='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><?aid style="50" type="snippet" readerVersion="6.0" featureSet="257" product="8.1(420)" ?><?aid SnippetType="PageItem"?><Document DOMVersion="8.1" Self="d"><Spread Self="ue2"><TextFrame Self="u123" ParentStory="u111"></TextFrame></Spread><Story Self="u111"><ParagraphStyleRange><CharacterStyleRange><Properties><AppliedFont type="string">源ノ明朝</AppliedFont><CustomGlyph type="long">';
    var idms2='</CustomGlyph></Properties><Content><?ACE 1a?></Content></CharacterStyleRange></ParagraphStyleRange></Story></Document>';
    var idmsFile=File("~/Desktop/akitomo.idms");
    idmsFile.encoding="UTF8";
    idmsFile.open("w");
    idmsFile.write(idms1+cid+idms2)
    idmsFile.close();
    var docu=app.activeDocument;
    var tf0=docu.textFrames.itemByName("akitomo");
    var tf1=docu.pages[0].place(idmsFile)[0];
    tf0.parentStory.contents="";
    tf1.parentStory.texts[0].move(LocationOptions.AT_BEGINNING,tf0.texts[0]);
    tf1.remove();
})""";
BridgeTalk.bringToFront("indesign");
indesign.executeScript("app.selection[0].name='akitomo'")
for(var i=1;i<65334;i++){
    indesign.executeScript(sss+"("+i+")")
    $.sleep(200)
}

遊び方

①InDesign上でテキストフレームを1つ選択します
②上記のスクリプトをESTKで、ESTKを対象に実行します
③選択テキストフレームに源ノ明朝のグリフが1つずつ順に表示されます

注意

・②を必ず守りましょう。InDesignのスクリプトパネルから実行しちゃダメ。 をInDesignに変えるのもダメ

・一時停止、停止はESTKの を使いましょう
・文字は13Qで配置されるので、大きく表示したい場合はズームするか、環境設定>一般>拡大縮小時:拡大縮小率を調整 に設定してテキストフレームを拡大しておきます
・再生中もInDesignは操作できるのでプレゼンテーションモードにしたりできます。でも別のドキュメントを開いたりはしないでね
・表示が追いつかずにグリフがとびとびになる場合は$.sleepの値を増やしてね

[InDesign]
ツイッターに書いた小ネタを振り返ってみる InDesignスクリプト編

超絶便利なスクリプトです。私はShift+Zという打ちやすいショートカットキーを登録して頻繁に使ってます。
CS5あたりでInDesignのDOMが変更されて、pageItemの親がページじゃなくスプレッドになったことで動かなくなってますが、少しの修正で動きます。

プロフィール

あるふぁ(仮)
InDesignで新聞組版のようなことをしてる人です。

InDesignスクリプトについて

つくったInDesignスクリプトのまとめ

twitter

5つの「く」

ハタハタのすばらしさをまとめました。