/* filename: fit_text.jsx ver. 0.1 初版 http://blog.dtpwiki.jp/dtp/2005/03/indesigncsjavas_1.html ver. 0.2 テキストフレーム内のすべてのパラグラフで実行 縦組・横組で判断して個別対応 テキストフレーム内のテキストを選択していた場合に対応 TextFrameオブジェクトにメソッドを拡張する形で実装 ver. 0.3 http://blog.dtpwiki.jp/dtp/2008/09/indesign-javasc.html パラグラフ選択ではなくparentStoryで選択するようにした */ #target "InDesign" (function(){ //TextFrameオブジェクトにfitTextHolizontalScaleメソッドを拡張 TextFrame.prototype.fitTextHolizontalScale = function(limit) { var self = this; for ( var i = 100; i >= limit; i--) { // 100からlimitまで // 1ずつ減らす if ( !self.overflows ) break; // あふれ解消したらループ // 抜ける self.parentStory.horizontalScale = i; } return; }; //TextFrameオブジェクトにfitTextVerticalScaleメソッドを拡張 TextFrame.prototype.fitTextVerticalScale = function(limit) { var self = this; for ( var i = 100; i >= limit; i--) { // 100からlimitまで // 1ずつ減らす if ( !self.overflows ) break; // あふれ解消したらループ // 抜ける self.parentStory.verticalScale = i; } return; }; // ストーリーの方向により処理を分岐(実際に呼ぶのは // このメソッド) TextFrame.prototype.fitText = function(limit) { var self = this; var idStoryOrientation = { 1752134266: 'idHorizontal', 1986359924: 'idVertical', }; if (idStoryOrientation[ self.parentStory.storyPreferences.storyOrientation ] == 'idHorizontal') { this.fitTextHolizontalScale(limit); } else { this.fitTextVerticalScale(limit); } return; }; // メインルーチン // InDesign上で選択中のオブジェクトの一覧を取得 var selObjs = app.activeDocument.selection; // 選択しているオブジェクトのコンストラクタを確認して、 // フィットするしない判断 for (var i = 0; i < selObjs.length; i++) { var selObj = selObjs[i]; if ( selObj.constructor.name == 'TextFrame' ) { // テキストフレームだった場合 var textFrameObj = selObj; textFrameObj.fitText(10); // 最小10%まで文字つぶす } else if ( selObj.constructor.name == 'Text' ) { // テキストフレーム内のテキストが選択されていた場合 // テキストが所属するフレームを選択してfit var textFrameObj = selObj.parentTextFrames[0]; textFrameObj.fitText(10); // 最小10%まで文字つぶす } } return; // メインルーチン終わり })()