Home About Contact
ExtendScript , InDesign , DTP

InDesign ExtendScript で段落および文字スタイルをつくって適用する Hello, World!

文字スタイルをスクリプトでつくって適用する方法を調べた。

Hello, World!

それを使って Hello, World! を生成して、段落スタイルと文字スタイルを適用するスクリプトを書いたので 備忘録を残します。

完成したコードは Github の InDesign ExtendScript Examples に入れました。

テキストを置いていくタイプのスクリプトであれば、 insertionPointapplyParagraphStyleapplyCharacterStyle を使えばよい。一旦 文字スタイルを適用すると、その後はずっとその文字スタイルが続くため、もし元の状態、つまり何も文字スタイルが適用されていない状態にするには、再度 insertionPoint に、いわゆる [なし] の文字スタイルを適用する必要があります。

[なし] の文字スタイルは、新規ドキュメントをつくった段階であらかじめ存在しているようです。 これ英語版の InDesign の場合名称が異なると思う。 このスクリプトでは、文字スタイル名で取得しないで、単純に先頭にある文字スタイル取得して、それを [なし] の文字スタイルであると決めうちして処理しています。

業務で使う場合はおそらくスクリプトでドキュメントを生成するのではなく、既存の InDesignドキュメントに対して処理するでしょうから、そのドキュメントにあわせて、名指しで該当文字スタイルを取得することになると思う。

var getEmptyCharacterStyle = function(doc){
    //return doc.characterStyles.item('[なし]');
    return doc.characterStyles.item(0);
};

var emptyCharacterStyle = getEmptyCharacterStyle(doc);

文字スタイルや段落スタイルはプロパティが非常に多いので、スクリプトでゼロからそれらのパラメータを入れるのは大変です。 フォントについても、ここでは Arial を使っていますが、もし環境に Arial がなかったら、エラーになる。

そもそも Arial Regular という名前も、 Arial と Regular の間がタブになっているので、注意が必要です。

環境に存在するフォントを調べたければ:

var fonts= app.fonts;
var len = fonts.length;
for(var i=0; i<len; i++){
  var font = app.fonts[i];
  $.writeln(font.name);
}

のようなコードを動かせばよい。