とあるDTPオペレーターのInDesignスクリプト備忘録

デザイナー上がりですがいまはDTP命。InDesign用スクリプトの解説などを綴っています。コメント、読者登録歓迎

段落スタイルあれこれ

ネタもないので、スクリプトで段落スタイルを編集するときのなんやかやを思いつくままに。

var myDoc = app.activeDocument;

/////新たに段落スタイル「サンプル」を設定する場合
var paraSt = myDoc.paragraphStyles.add ({name:"サンプル"});
////既存の段落スタイル「サンプル」を指定する場合
var paraSt = myDoc.paragraphStyles.itemByName ("サンプル"); 

/////段落スタイルの設定項目の一部
with (paraSt){
  appliedFont = "A-OTF A1明朝 Std"; //適用されるフォント
  fontStyle = "Bold"; //フォントのウェイト
  autoLeading = 300; //自動行送り(%指定);
  autoTcy = 5; //自動縦中横(有効なのは5桁まで?)
  characterAlignment = CharacterAlignment.ALIGN_BASELINE //文字揃え
  strokeColor = "C=100 M=0 Y=0 K=0" ; //線の色
  fillColor = "C=0 M=100 Y=0 K=0"; //塗りの色
  endJoin = OutlineJoin.ROUND_END_JOIN; //角の結合
  fillTint = 80; //塗りの濃淡
  glyphForm = AlternateGlyphForms.JIS04_FORM; //異体字
  justification = Justification.CENTER_ALIGN; //段落揃え
  kinsokuSet = KinsokuSet.HARD_KINSOKU; //禁則処理セット
  }

///////正規表現スタイルの追加
var seki = paraSt.nestedGrepStyles.add ();
with (seki) {
  appliedCharacterStyle = myDoc.characterStyles.item("任意の文字スタイル") ;//呼び出す文字スタイル
  grepExpression = "^\d\d?" //正規表現の式
    }

禁則(kinsoku)とか縦中横(Tcy)とかがまんま日本語なのが面白いですね~

ループでフレームを消し切る書き方

つづき

前回の例がフレームを消しきれない理由……それは、


ループでテキストフレームの数を減らしていくスクリプトなのに、ループの内側でテキストフレームの数を数えさせていたから

でした。
「remove()」によりループするたびにテキストフレームが減り、カウンタは増えていく。そのためループ回数の真ん中辺りでカウンタと終了条件が成立してしまうのです。
出題の元ネタは、過去に自分がやらかした書きミスです。


最後に、例題のスクリプトをうまく動かす模範解答的なものも載せておきます。

[解答1]ループ前にテキストフレームの数を代入する方法

var myDoc = app.activeDocument;
var obj = myDoc.textFrames;
var objLen = obj.length;//←ループ前にテキストフレームの数を代入

for (var i=0; i<objLen; i++) {//条件文にはループの外で宣言した変数を使用
    obj[0].remove(); //削除実行
    }

…これが一番ポピュラーかな?
ループの前に宣言した変数の値は、ループによる影響を受けません。

↓のような書き方でも一応はちゃんと動きます。あまりこういう書き方はしないかもですが…

続きを読む

テキストフレームをループで全消しするには?

f:id:rokuyaN:20170623010613j:plain

図のようにいくつかのテキストフレーム(グループ化はされていない)が並んだ単ページのInDesignドキュメント。これらのテキストフレームを全て消すスクリプトを書きましたが、実行してみるとフレームが消しきれずに残ってしまいます。
以下のスクリプトの何が問題か、もしくはどうすればうまく動作するようになるか、つづきは次の記事で。

var myDoc = app.activeDocument;
var obj = myDoc.textFrames;

for (var i=0; i<obj.length; i++) {
    obj[0].remove (); //←remove()は削除の命令文
    }

現在のページを印刷するスクリプト

すでに有志がもっとスゴイのを作っていそうだし、需要があるかは分かりませんが、InDesignで「現在のページを印刷する」スクリプトを書いてみました。

続きを読む

続・ページ上のオブジェクト指定

■allPageItemsで、マスターページを除外する書き方の例

[例1]ドキュメントページを指定(例は1ページ)して処理する場合

続きを読む