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ページ目にテキストフレームが一つだけ存在していて、 テキストがオーバーフローしている状態にしておきます。
そうした上でこのコードを実行すると、 必要なだけページ作成とテキストフレームの作成を繰り返し、 テキストフレームのあふれを解消します。