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(); //ファイルクローズ
}