Edited at

InDesign JavaScript チートシート

記事に画像を入れると重たくなるので、ソースコード例をメインに掲載。

ソースコード例中の変数

変数名

説明

doc
Document
InDesignドキュメント

docList
Array
InDesignドキュメントのリスト

pageItem
PageItem
ページ内オブジェクト

exportPDFFilePath
String
PDFの出力ファイルパス

strText
String
何かしらの文字列

fileName
String
処理対象のファイルパス


ドキュメント操作


ファイル名を指定してInDesignファイルを開く

var doc = app.open("/Users/efla/Desktop/test.indd");


フォルダをユーザが指定したフォルダ内のすべてのInDesignファイルを開く

var folderObj = Folder.selectDialog("Select Folder");

fileList = folderObj.getFiles("*.indd");

var i = 0;
var docList = new Array();
for (i=0; i<fileList.length; i++ ) {

docList.push(app.open(fileList[i]));
}


ドキュメントを保存する

doc.save(filePath);


ドキュメントを閉じる


doc.close();


ドキュメントを保存して閉じる

doc.close(SaveOptions.yes);


ドキュメントのファイル名を取得する

var filename;

filename = doc.name;


ドキュメントのファイルパス取得する


エラーチェック・ユーザインタフェース


警告ダイアログを表示する

var message = 'エラーが発生しました。';

alert(message);


ファイル操作


ファイル選択画面を表示してユーザにファイルを選択させる

var fileObj = File.openDialog("Select File");


テキストファイルを新規作成して書き込みを行う

注意:処理系がWindowsの場合、出力先のパスのフォルダ区切り文字は「¥」マークに置き換える必要があります。(CS5で検証)

var fileObj = new File(fileName); //fileNameは処理したいファイルのパス

var flag = fileObj.open("w");

if ( flag ) {

fileObj.writeln("1行目");
fileObj.writeln("2行目");

fileObj.close();
}
else {

alert("ファイルを作成できませんでした");
}


論理演算

これ言語によって違うからメモ書き。

if文で使った時の動作を記載。

演算子
動作
結果

=
代入
代入した値が入る。booleanの条件判定は「0をfalseとみなす」ので、「0以外の代入は真」とみなされる。

==
等価演算
左辺と右辺の結果が同じ場合に真、そうでない場合は偽とみなされる。

!=
等価演算(否定)
左辺と右辺の結果が同じ場合に真、そうでない場合は偽とみなされる。

&&
AND演算
省略

||
OR演算
省略


オブジェクトの種別や構造を取得する


オブジェクトの型の判定

var typeName = pageItem.constructor.name;

if (typeName == "Group") {
//...
}


オブジェクトモデル
説明

Group

Page

Image

Polygon

Oval

EPS


オブジェクトのコンテンツタイプを判定

if (pageItem.contentType == contentType.TextType) {

//...
}

コンテンツタイプ
クラス
説明

contentType.TextType

contentType.GraphicType


よく使うオブジェクトの構造判定と種別の判定


オブジェクトがTextFrameかどうか判別する

var typeName = pageItem.constructor.name;

if (typeName == "TextFrame") {
//...
}


オブジェクトの座標を取得する

オブジェクトの可視範囲の取得。例えば、オブジェクトに線が設定されている場合、線の太さも加味した領域。

座標
取得方法

左上のX座標
pageItem.visibleBounds[0]

左上のY座標
pageItem.visibleBounds[1]

右下のX座標
pageItem.visibleBounds[2]

右下のX座標
pageItem.visibleBounds[3]


オブジェクトを加工する


オブジェクトの不透明度を設定する。

代入する値は0-100(%)

pageItem.transparencySettings.blendingSettings.opacity = 50;


スクリプトラベル操作


スクリプトラベルを取得する

var label = pageItem.label;


レイヤー操作


名前を指定してレイヤーを削除する

以前の投稿にコメントでいただいたサンプルです。

var l = app.activeDocument.layers.itemByName("test");

if (l.isValid){
l.remove();
}


名前を指定してレイヤーを非表示にする

var l = app.activeDocument.layers.itemByName("test");

if (l.isValid) {
l.remove();
}


出力


PDFファイルに出力する

注意:処理系がWindowsの場合、出力先のパスのフォルダ区切り文字は「¥」マークに置き換える必要があります。(CS5で検証)

doc.exportFile(ExportFormat.pdfType, exportPDFFilePath);


PDFファイルに出力する

注意:処理系がWindowsの場合、出力先のパスのフォルダ区切り文字は「¥」マークに置き換える必要があります。(CS5で検証)

doc.exportFile(ExportFormat.pdfType, exportPDFFilePath);


文字列操作


文字列の指定した文字数目を取り出す

var strText = "テスト用1文字列";

var strCharAt = strText.charAt(3);


文字列の指定した文字数目の文字コードを取り出す

var strText = var strText = "テスト用1文字列";

var intCharCodeAt = strText.charCodeAt(3);


文字列から改行を取り除く

処理系で¥nや¥rの条件が結構変わるので。

一番安定した方法。

var CRCODE = String.fromCharCode(13);

var LFCODE = String.fromCharCode(10);

strText = strText.split(CRCODE); strText = strText.join("");
strText = strText.split(LFCODE); strText = strText.join("");


ルビ情報を取得する(文字単位)

ルビは1文字に対しての設定。文章にルビが含まれているかどうかは、for文を使って1文字ずつ確認する必要がある。

var flag = pageItem.paragraphs[0].characters[0].rubyFlag;  /* boolean:true/false */

var rubyString = pageItem.paragraphs[0].characters[0].rubyString; /* brank is <![CDATA[]]> */
var rubySize = pageItem.paragraphs[0].characters[0].rubyFontSize; /* integer */


ルビを設定する(文字単位)

ルビは1文字に対して設定する。

pageItem.paragraphs[0].characters[0].rubyFlag = true;

pageItem.paragraphs[0].characters[0].rubyString = "ほげ";
pageItem.paragraphs[0].characters[0].rubyFontSize = 8;


文字列を置換する

正規表現を使わない場合

strText = strText.replace("a","b");


XML操作

検証中:もしかして、JavaScriptのXML操作の全てが実装されてはいないか?素直にjQuery使った方がいいのかもしれない。


XMLオブジェクトのパース

プロパティ経由でアクセスする。

var str_xml = '<root><item att="hoge">1つめ</item><item att="hogehoge">2つめ</item></root>'

var x_data = new XML(str_xml);

var text = x_data.item[0];

$.writeln(t);

XPath経由でアクセスする

var str_xml = '<root><item att="hoge">1つめ</item><item att="hogehoge">2つめ</item></root>'

var x_data = new XML(str_xml);

var text = x_data.xpath("/root/item")[0];

$.writeln(text);

属性値を取り出す

var str_xml = '<root><item att="hoge">1つめ</item><item att="hogehoge">2つめ</item></root>'

var x_data = new XML(str_xml);

var text = x_data.item[0].@att;

$.writeln(text);


列挙体


列挙体を定義して使う

マジックナンバーは使わないようにしたい。

var type = {

title : "100",
author : "200",
content : "300"
}

function main () {

var a = "100";

$.writeln(a==type.title);
}

main();


ユーザインタフェース


処理を止めてウィンドウを表示する

var w = new Window('window', 'ウィンドウ',[100,100,100,100]);

w.show():


処理を止めないでウィンドウを表示する

var w = new Window('palette', 'ウィンドウ',[100,100,100,100]);

w.show():

  • エラーチェック・ユーザインタフェース
  • ファイル操作
  • 論理演算
  • オブジェクトの種別や構造を取得する
  • よく使うオブジェクトの構造判定と種別の判定
  • オブジェクトを加工する
  • スクリプトラベル操作
  • レイヤー操作
  • 出力
  • 文字列操作
  • XML操作
  • 列挙体
  • ユーザインタフェース
  • 処理を止めないでウィンドウを表示する