Index > InDesign CS3/CS4 で "スマートテキストのリフロー処理 をする" 的な JavaScript
Sun, April 4, 2010

InDesign CS3/CS4 で "スマートテキストのリフロー処理 をする" 的な JavaScript

InDesign勉強の部屋で勉強していたら スマートテキストのリフロー処理 をするを発見。 これは便利、と思ったが、諸事情によりJavaScriptで直接リフロー処理するコードを書きました。

このエントリは移動しました.

reflow.jsx

// 1) テスト用ファイルを開く
var testfile = new File("/c/home/test.indd")
app.open( testfile )
var myDoc  = app.activeDocument


// 2) テキストフレームが存在していることが前提
var myPage = myDoc.pages.item(0);
var tf1    = myPage.textFrames.item(0)


// 3) オーバフローが解消されるまでページ追加とテキストフレーム追加および連結を繰り返す
while( tf1.overflows ){
    // ページを追加
    var myPage2 = myDoc.pages.add();

    // テキストフレームを作成
    var tf2     = createTextFrame(myDoc,myPage2);

    // 連結
    tf1.nextTextFrame = tf2;

    tf1 = tf2
}



// 以下は便利メソッド

function createTextFrame(myDoc,myPage){
    var myTextFrame=myPage.textFrames.add();
    var myBounds = myGetBounds(myDoc,myPage);
    myTextFrame.geometricBounds=myBounds;

    return myTextFrame;
}

function myGetBounds(myDoc, myPage){
    with(myDoc.documentPreferences){
        var myPageHeight = pageHeight;
        var myPageWidth = pageWidth;
    }
    with(myPage.marginPreferences){
        var myTop = top;
        var myLeft = left;
        var myRight = right;
        var myBottom = bottom;
    }
    myRight = myPageWidth - myRight;
    myBottom = myPageHeight- myBottom;
    return [myTop, myLeft, myBottom, myRight];
}

説明

c:\home\test.indd にテスト用のファイルを配置しておきます。 このファイルは、1ページ目にテキストフレームが一つだけ存在していて、 テキストがオーバーフローしている状態にしておきます。

そうした上でこのコードを実行すると、 必要なだけページ作成とテキストフレームの作成を繰り返し、 テキストフレームのあふれを解消します。

 Twitter
follow me on Twitter
 Categories