この記事は5年以上前の情報で、内容が古くなっている可能性があります。

InDesign JavaScript(ExtendScript)

InDesignで自動処理を行うための、JavaScript(ExtendScript)のメモです。

※ この記事は量が増えていったら分割するかもしれません。
※ InDesign CS2でしか検証してないので、他のバージョンで動くかは不明。

現在開いているドキュメントを取得

var doc = app.activeDocument;

現在選択しているオブジェクト取得

var sele = app.selection;
var sele_cnt = select.length;  //選択しているオブジェクトの数

var obj_1 = sele[0];  //1つ目のオブジェクト
var obj_2 = sele[1];  //1つ目のオブジェクト

オブジェクトの種類取得

種類名
GraphicLine : 線(閉領域のない図形)
Oval : 楕円
Polygon : 多角形
Rectangle : 長方形
TextFrame : テキストフレーム
var obj_type = sele.constructor.name;
if(obj_type == "GraphicLine"){
    //長方形
}
else if(obj_type == "Oval"){
    //楕円
}

ページの操作

ドキュメントに含まれるページ取得

var doc = app.activeDocument;
        
var pages = doc.pages;

var page_1 = pages[0];  //1ページ目
var page_2 = pages[1];  //2ページ目

var page_cnt = pages.length;  //ページ数

テキストフレームの操作

ドキュメント・ページに含まれるテキストフレーム取得

//ドキュメントに含まれるテキストフレーム
var doc = app.activeDocument;
var txtfms = doc.textFrames;

//ぺージに含まれるテキストフレーム
var page_0_txtfms = doc.pages[0].textFrames;

var txtfm1 = txtfms[0]; //1つ目のテキストフレーム
var txtfm2 = txtfms[1]; //1つ目のテキストフレーム

表示している部分の文字列取得(あふれ分は入らない)

var txtstr = txtfms.contents;

文字あふれがあるかチェック


if(txtfms.overflows){
    //返り値 true:文字あふれあり
}
else{
    //返り値 false:文字あふれなし
}

テキストフレームのフィット

txtfms.fit(FitOptions.frameToContent);
オプションの値
FitOptions.contentToFrame : 内容をフレームに合わせる
FitOptions.frameToContent : フレームを内容に合わせる
FitOptions.centerContent : 内容を中央にする
FitOptions.proportionally : ?
FitOptions.fillProportionally : ?

段落の取得(テキストフレームに入っている文字列一行分)

var pars = txtfm.paragraphs;

段落スタイルの取得

style = pars[0].appliedParagraphStyle.name;

上下左右の位置(座標)取得

var y1 = txtfm.visibleBounds[0];  //上
var x1 = txtfm.visibleBounds[1];  //右
var y2 = txtfm.visibleBounds[2];  //下
var x2 = txtfm.visibleBounds[3];  //左

図形(長方形・楕円等)の操作

ドキュメント・ページに含まれる図形取得

//ドキュメントに含まれる図形
var doc = app.activeDocument;
var doc_polies = doc.polygons;  //多角形

//ぺージに含まれる図形
var pages = doc.pages;
var page_rects = page[0].rectangles;   //長方形
var page_ovals = page[0].ovals;  //楕円

オブジェクトスタイルの取得

var objstyle = page_rects[0].appliedObjectStyle;

上下左右の位置(座標)取得

テキストフレームと同じ

visibleBoundsで取得できる座標についての覚書

ページ左上が原点(0,0)(塗り足し分は入らない) 単位は、環境設定の単位(と、思われる) ツールバーの座標とサイズの値とほぼ同じ(微妙にずれている) ただし、見開きの場合は、左のページの原点が原点になるので、右側のページの座標は、左のページからの座標になる。 ※ いずれも横書きの場合。縦書きがどうなるかは不明 ※ オブジェクトの原点が変更されている場合はどうなるか不明

ファイルの操作(ドキュメント本体でなく外部ファイル)

ファイルの読み込み

後ほど記載

ファイルの書き込み

//Windowsの場合はファイルの区切りは ¥(バックスラッシュ) でなく /(スラッシュ)
        
var filename = "d:/test/test.txt";

var outstr = "あいうえお";

var file = new File(filename);

//エンコード指定 指定しないとシステムのデフォルトのエンコード(WinならShift_JIS)
file.encoding = "UTF-8";

if(file){
    //ファイルオープン(w=書き込み/r=読み取り/e=読み取り書き取り)
    fp = file.open("w");  

    if(fp){
        file.write(outstr);  //書き出し
        file.close();   //ファイルクローズ
}