InDesignの各種オブジェクトのプロパティを書き出すスクリプト(関数)です。

第2引数にオプションを渡すことで、HTMLファイル、タブ区切りTEXTファイル、コンソールへ書き出すことができます。

 

以下の例では、選択したオブジェクトのプロパティをHTMLファイルに書き出します。

// 呼び出し見本(InDesign)
var selObj = app.selection;
if (selObj.length === 0) { alert('選択されたオブジェクトがありません'); exit(); }
getProperties (selObj[0], 'html');
// 第2引数はオプション
// 'html' : HTMLファイルで書き出し
// 'tab' : タブ区切りテキストで書き出し
// デフォルト(なし) : コンソールへ書き出し

この例では選択したオブジェクトを書き出していますが、もちろん「app.activeDocument」など、プロパティを持つオブジェクトを直接渡しても書き出すことができます。

 

// オブジェクト調査
#target "InDesign"

function getProperties (obj, returnType) {
    // HTMLでラッピング
    var wrapHTML= function (title, prop, returnType) {
        var t= '<!DOCTYPE html>\n';
        t+= '\t<meta charset="UTF-8">';
        t+= '\t<meta name="viewport" content="width=device-width, initial-scale=1.0">\n';
        t+= '\t<meta http-equiv="X-UA-Compatible" content="ie=edge">\n';
        t+= '\t<title> '+title+' </title>\n';
        t+= '</head>\n';
        t+= '<body>\n';
        t+= '<h3>'+title+'</h3>\n';
        t+= '\t<table border="1" cellpadding="5">\n';
        t+= '\t<tr bgcolor="#CCCCCC">\n';
        t+= '\t\t<td>property name</td><td>data type</td><td>value</td>\n';
        t+= '\t</tr>\n';
        for (var i=0; i< prop.length; i++) {
            t+= '\t\t<td>'+prop[i][0]+'</td><td>'+prop[i][1]+'</td><td>'+prop[i][2]+prop[i][3]+'</td>\n';
            t+= '\t</tr>\n';
        }
        t+= '\t</table>\n';
        t+= '</body>\n';
        t+= '</html>';
        return t;
    }
    // tab区切りテキストに変換
    var excTabText= function (title, prop) {
        var t= title+'\n';
        for (var i=0; i< prop.length; i++) {
            t+= prop[i][0]+'\t'+prop[i][1]+'\t'+prop[i][2]+prop[i][3]+'\n';
        }
        return t;
    }
    //
    // 解析部分
    //
    var masterArray=[];
    var propName, dType, value, num, xStr;
    var title= obj.constructor.name; // タイトル(オブジェクト名)
    var prop= obj.reflect.properties;
    var excStr= '__proto__, __count__, __class__, reflect'; // 除外するプロパティ
    for (var i=0; i< prop.length; i++) {
        sub=[], num='';
        propName= prop[i].name; // プロパティ名
        if ( ! excStr.match(propName) ) {
            dType= prop[i].dataType; // データタイプ
            value= obj.properties[propName]; // 値
            if ( value== null ) {
                value='null';
            } else {
                if ( value.constructor.name=='Array' ) {
                    dType=  'Array';
                    value= '['+value+']';
                }
            }
            if ( dType=='Enumerator' ) {
                value= value.toString ();
                num= '('+parseInt(obj.properties[prop[i].name])+')'; // 定数の数値
            }
            masterArray.push ([propName, dType, value, num])
        }
	}
    // ソート
    masterArray.sort( function (a, b) {
        //比較関数
        if ( a[0]<b[0] ) return -1;
        if ( a[0]> b[0]) return 1;
        return 0;
    } );
    // 出力形態に対応
    var res, ext;
    if ( returnType=='html' ) {
        res= wrapHTML(title, masterArray);
        ext= '.html';
    } else if ( returnType=='tab' ) {
        res= excTabText(title, masterArray);
        ext= '.txt';
    } else {
        // デフォルトはコンソールへ書き出し
        $.writeln ( '< '+title+' >\n' );
        $.writeln ( 'property name, data type, value' );
        for (i=0; i< masterArray.length; i++) {
            $.writeln ( '---------------------------------------------' );
            $.writeln (masterArray[i][0]+', '+masterArray[i][1]+', '+masterArray[i][2]+masterArray[i][3]);
        }
        return;
    }
    // 書き出し
    var fObj= new File( '~/Desktop/'+title+ext );
    fObj= fObj.saveDlg('ファイルの保存');
    if (fObj != null) {
        fObj.encoding= 'UTF-8';
        fObj.open('w'); //書き込み専用で開く
        var err= fObj.write( res ); // 結果文字列を書き出し
        if ( ! err ) { alert('書き込みに失敗しました'); }
        fObj.close();
    }
    return;
}

 

 

Joomla templates by a4joomla