記事に画像を入れると重たくなるので、ソースコード例をメインに掲載。
ソースコード例中の変数
変数名 | 型 | 説明 |
---|---|---|
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():