Sunday, April 4, 2010
InDesign勉強の部屋で勉強していたら スマートテキストのリフロー処理 をする を発見。これは便利、と思ったが、諸事情によりJavaScriptで直接リフロー処理するコードを書きました。
//
// InDesign Extend Script
// テキストフレームからオーバーフローしたら新しいテキストフレームを追加して連結.
//
// 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ページ目にテキストフレームが一つだけ存在していて、テキストがオーバーフローしている状態にしておきます。
そうした上でこのコードを実行すると、必要なだけページ作成とテキストフレームの作成を繰り返し、テキストフレームのあふれを解消します。