2011年6月14日

複数のテキストフレームをひとつずつ別文書にコピー

わたしがつくっている新聞では「新年あいさつ」と「暑中見舞い」、年2回の名刺広告を掲載してます。

1枠の料金は年間購読料よりも高く、全体でけっこうな収入になるのですが、募集事務の手間がたいへんなのです。かつては編集部に4人もいて、財政部門も手伝ってくれていたのですが、ここ10年ぐらいはわたしひとりで作業をしています。
  1. 前回の降版データから、個々の名刺広告(ひとつひとつがテキストフレームに入っています)をコピーし、
  2. 1枚の募集要綱にひとつずつペースト(内容の確認や今回の掲載に向けての変更を広告主にしてもらうためです)、
  3. 広告主を照合しながら、募集要綱を宛名ラベルを貼った封筒に詰めて発送しています。
これをなんとか省力化しようと、大組ゲラ上の前回データを募集要綱(小組ゲラ)へコピー&ペーストするという作業をInDesignで自動化させてみました。

CS2なので複数文書の取り扱いに不便なところがあります。CS2ではcopy()とpaste()でしか文書間のコピー&ペーストができないようなのです。しかも、copy()とpaste()は前面のlayoutWindowにしか作用しない。

そこでlayoutWindowを切り替えてやらねばならないのですが、その際、documents[0]とdocuments[1]とが指し示す文書まで入れ替わってしまいます(そのためオブジェクト名の表記を変数をもちいて簡略化できません)。

CS4だとduplicateでコピー元やペースト先が明確に指示できるし、layaoutWindowを切り替える必要もないので、もっと楽にできそうです。

とりあえず動くようになったスクリプトはこんな具合です(エラー処理その他は未実装)。

var ohgumi = File.openDialog ("大組ゲラを開く");
app.open(ohgumi);
var kogumi = File.openDialog ("小組ゲラを開く");
app.open(kogumi);
 /*document[1]は大組ゲラ*/
var numTF = app.documents[1].textFrames.length;
for (i=0; i<numTF; i++){
 /*前面を大組ゲラに切り替え*/
 app.layoutWindows[1].bringToFront();
 app.select(NothingEnum.nothing);
 /*documents[0]は大組ゲラ*/
 app.documents[0].textFrames[i].select();
 app.copy();
 /*前面を小組ゲラに切り替え*/
 app.layoutWindows[1].bringToFront();
 app.paste();
 app.select(NothingEnum.nothing);
 /*documents[0]は小組ゲラ*/  
 app.documents[0].pages[i].textFrames[0].move(["0mm","0mm"]);
 if (i<numTF-1){
 /*documents[0]は小組ゲラ*/
  app.documents[0].pages.add(1701733408);
  }
 }

0 件のコメント: