InDesignのスクリプト定数(enumerator)は
誰か先に書いていて二番煎じだったらすみません。一応検索して引っかからなかったので書きます。
InDesignのスクリプトを書いていて何が困るかというと、定数(enumerator)が長い、または覚えることのできない数字ということ。
PDFの書き出しであれば
doc.exportFile(ExportFormat.PDF_TYPE, "a.pdf")
または
doc.exportFile(1952403524, "a.pdf")
と書かなければならない。
私は少しでも短くなるように数字を書く方が多いのだけれど、この数字は何なんだ。オブジェクトごとにまとまっているわけでもなく、Adobeの開発者も管理するのが大変だろう。
と、思っていました。
が、この数字をよく見ているとひょっとして? 16進数に変換してみよう。
1952403524 => 745F5044
これを文字コードと仮定して文字に変換してみよう。
0x74、0x5F、0x50、0x44 => t_PD
おお、なんか意味ありそうだ。じゃあ、他のもやってみよう。
EPS_TYPE(1952400720) => "t_EP"
EPUB(1701868898) => "epub"
FIXED_LAYOUT_EPUB(1701865080) => "epfx"
HTML(1213484364) => "HTML"
HTMLFXL(1213490808) => "HTfx"
INCOPY_MARKUP(1768123756) => "icml"
INDESIGN_MARKUP(1768189292) => "idml"
INDESIGN_SNIPPET(1936617588) => "snpt"
INTERACTIVE_PDF(1952409936) => "t_iP"
JPG(1246775072) => "JPG "
PACKAGED_XFL(1702389356) => "exfl"
PNG_FORMAT(1699761735) => "ePNG"
RTF(1381254688) => "RTF "
SWF(1702066022) => "eswf"
TAGGED_TEXT(1416066168) => "Tgtx"
TEXT_TYPE(1952412773) => "t_te"
XML(1481460768) => "XML "
(注:JPG 、RTF 、XML は4文字目は半角スペース)
やられた。Adobeではこの文字列で管理してたのかっ!
でもそれがわかればもっとすっきりしたスクリプトが書けるぞ。
ということで、10進数から元の4文字に戻す関数はこちら。
//arg = 10進数の数値
function transstr(arg){
var tstr = "";
do {
tstr = String.fromCharCode(arg % 256) + tstr;
arg = Math.floor(arg / 256);
} while (arg > 0)
return tstr;
}
実際に使う場合は
doc.exportFile(n("t_PD"), "a.pdf"); function n(arg){ var tint = 0; for(i=0; i<arg.length; i++){ int1 = arg.charCodeAt(i); int1 = int1 * Math.pow(256, arg.length -1 - i); tint = tint + int1; } return tint; }
これは楽になりそうだぜ。