InDesignで自動処理を行うための、JavaScript(ExtendScript)のメモです。
※ この記事は量が増えていったら分割するかもしれません。
※ InDesign CS2でしか検証してないので、他のバージョンで動くかは不明。
現在開いているドキュメントを取得
1 |
var doc = app.activeDocument; |
現在選択しているオブジェクト取得
1 2 3 4 5 |
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 : テキストフレーム
1 2 3 4 5 6 7 |
var obj_type = sele.constructor.name; if(obj_type == "GraphicLine"){ //長方形 } else if(obj_type == "Oval"){ //楕円 } |
ページの操作
ドキュメントに含まれるページ取得
1 2 3 4 5 6 7 8 |
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; //ページ数 |
テキストフレームの操作
ドキュメント・ページに含まれるテキストフレーム取得
1 2 3 4 5 6 7 8 9 |
//ドキュメントに含まれるテキストフレーム 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つ目のテキストフレーム |
表示している部分の文字列取得(あふれ分は入らない)
1 |
var txtstr = txtfms.contents; |
文字あふれがあるかチェック
1 2 3 4 5 6 |
if(txtfms.overflows){ //返り値 true:文字あふれあり } else{ //返り値 false:文字あふれなし } |
テキストフレームのフィット
1 |
txtfms.fit(FitOptions.frameToContent); |
- オプションの値
- FitOptions.contentToFrame : 内容をフレームに合わせる
- FitOptions.frameToContent : フレームを内容に合わせる
- FitOptions.centerContent : 内容を中央にする
- FitOptions.proportionally : ?
- FitOptions.fillProportionally : ?
段落の取得(テキストフレームに入っている文字列一行分)
1 |
var pars = txtfm.paragraphs; |
段落スタイルの取得
1 |
style = pars[0].appliedParagraphStyle.name; |
上下左右の位置(座標)取得
1 2 3 4 |
var y1 = txtfm.visibleBounds[0]; //上 var x1 = txtfm.visibleBounds[1]; //右 var y2 = txtfm.visibleBounds[2]; //下 var x2 = txtfm.visibleBounds[3]; //左 |
図形(長方形・楕円等)の操作
ドキュメント・ページに含まれる図形取得
1 2 3 4 5 6 7 8 |
//ドキュメントに含まれる図形 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; //楕円 |
オブジェクトスタイルの取得
1 |
var objstyle = page_rects[0].appliedObjectStyle; |
上下左右の位置(座標)取得
テキストフレームと同じ
visibleBoundsで取得できる座標についての覚書
ページ左上が原点(0,0)(塗り足し分は入らない)
単位は、環境設定の単位(と、思われる)
ツールバーの座標とサイズの値とほぼ同じ(微妙にずれている)
ただし、見開きの場合は、左のページの原点が原点になるので、右側のページの座標は、左のページからの座標になる。
※ いずれも横書きの場合。縦書きがどうなるかは不明
※ オブジェクトの原点が変更されている場合はどうなるか不明
ファイルの操作(ドキュメント本体でなく外部ファイル)
ファイルの読み込み
後ほど記載
ファイルの書き込み
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//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(); //ファイルクローズ } |