InDesign의 텍스트 프레임에 개별 기능 추가

12359 단어 indesign
오늘Javascript의prootype 구조를 사용하여 InDesign의 텍스트 상자에 독자적인 기능을 추가하려고 합니다.다음 3개를 추가한다.
①width
매개 변수가 호출되지 않았을 때 텍스트 상자의 폭을 되돌려줍니다.매개 변수를 지정하는 경우 텍스트 상자의 너비를 수정합니다.
②height
매개 변수가 호출되지 않았을 때 텍스트 상자의 높이를 되돌려줍니다.매개 변수를 지정하는 경우 텍스트 상자의 높이를 수정합니다.
③toRightSide
파라미터가 지정한 대상의 오른쪽으로 자신 (텍스트 상자) 이동
프로타입을 사용하면 InDesign에 있는 학급이라도 독자적인 기능을 추가할 수 있어 많은 진전이 있을 수 있다.
이번 샘플 스크립트를 실행한 후

↑ 이것은
↓ 이렇게 됩니다. ※ 실행시 텍스트 상자 선택

아래 샘플 코드의 주의사항
• 오류 처리 평소와 같이 생략
・toRightSide의 처리는 오른쪽으로만 이동하고 X방향의 좌표만 변경되기 때문에 세로 위치는 변하지 않는다.샘플 이미지는 우연히 세로로 되어 있을 뿐이다
//ソート用の関数X座標昇順に並べる
function mySort(a,b) {
    return(a.visibleBounds[1]-b.visibleBounds[1]);
}

// mmに単位を変更する
function tomm(document) {
  var back_x = document.viewPreferences.horizontalMeasurementUnits;
  var back_y = document.viewPreferences.verticalMeasurementUnits;
  document.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.millimeters;
  document.viewPreferences.verticalMeasurementUnits = MeasurementUnits.millimeters;
  return [ back_x, back_y ];
}

// mmから単位を元に戻す
function tounit(document, unit) {
  document.viewPreferences.horizontalMeasurementUnits = unit[0];
  document.viewPreferences.verticalMeasurementUnits = unit[1];
}

//=========================================================
//prototype を使用してテキストフレームへ機能を追加してみる
//=========================================================

//対象のオブジェクトの右側に移動する
TextFrame.prototype.toRightSide = function(targetObj,distance) {
    var leftPostion = targetObj.visibleBounds[3] + distance;
    this.move([leftPostion,this.visibleBounds[0]]);
}

//自身の幅を返す。引数がある場合は幅を変更する
TextFrame.prototype.width = function(value) {
    if (value == null) {
        return this.visibleBounds[3] - this.visibleBounds[1];
    } else {
        this.visibleBounds = [
            this.visibleBounds[0] ,
            this.visibleBounds[1]  ,
            this.visibleBounds[2] ,
            this.visibleBounds[1] + value
        ];
    }
}

//自身の高さを返す。引数がある場合は高さを変更する
TextFrame.prototype.height = function(value) {
    if (value == null) {
        return this.visibleBounds[2] - this.visibleBounds[0];
    } else {
        this.visibleBounds = [
            this.visibleBounds[0] ,
            this.visibleBounds[1]  ,
            this.visibleBounds[0] + value ,
            this.visibleBounds[3]
        ];
    }
}

//処理はここからよー
myDoc = app.activeDocument;
var myBackUnit = tomm(myDoc);
var myObj = new Array();
myObj = myDoc.selection;
myObj.sort(mySort);

var nowObj = null;
var i = 0;
for (i=1;i<myObj.length;i++) {
    myObj[i].height(myObj[0].height());
    myObj[i].width(myObj[0].width());
    myObj[i].toRightSide(myObj[i-1],3);
}
tounit(myDoc,myBackUnit);

좋은 웹페이지 즐겨찾기