ちくちく日記

DTP系備忘録。真面目にやってます。

InDesignCS2のデータ結合

InDesignCS2の新機能、データ結合。
簡単な流し込みならこれで完結してしまう、すんばらしい機能。

ずぼらな私は、なるべく手を抜いて楽をしたい、と常々考えているので簡単な仕事ならできるだけこれですませようとしている。
いままでの、一つ一つ流し込みをするためのスクリプトを書く手間にくらべたら、流し込みのテキストを作って、ひな形を作るだけで完了するなんて、すばらしー!流し込み時間も早いし!

が、すんばらしい機能であるデータ結合にも、欠点はある。

データ結合をして作った小組は、そのままだと、文字あふれ処理などがされていないので、オーバーフローの処理は別に行う必要がある。
オーバーフローの一括処理といった機能はないので、そこの部分は補うためのスクリプトなどを書く必要がある。

…とはいえ、これはたいした手間じゃない。
簡単にすまそうとおもえば
tell (every text frame whose overflows = true)
fit given frame to content--フレームを内容にあわせる
end tell
こんな手を使えば一瞬で終わる(荒技だけど)

問題なのは「特徴のないオブジェクトに処理をしたい」時。

「オーバーフローしているオブジェクト」というのをスクリプトで探すのは簡単だ。
every text frame whose overflows = true、であっという間にリストにできる。
でもたとえば、「オーバーフローしているオブジェクトの隣にあるオブジェクト」というのを指定したいと思ったら…これを一発で見つける書き方はない。

こういうとき、一つ一つ流し込むやり方だったら、流し込むときに、小組のオブジェクトに固有の名前をつけていって、その名前を元に対象のオブジェクトを探すのだけど(例えば、一つの小組で使われているオブジェクトには共通のIDをつけておく。商品名と価格と商品説明でできている小組だったらそれぞれに"商品名_○○○○"、"価格_○○○○"、"商品説明_○○○○"という名前。"○○○○"が共通のIDで、この名前を元に他のオブジェクトを探せる)

データ結合で作られたオブジェクトは、全部同じオブジェクトが複製されてしまうので、個別の名前をつける事ができない。
オーバーフローしているオブジェクトを探すのは簡単だけど、その他のオブジェクトに関連づけて探せない。例えば、オーバーフローした商品名のフレームをオーバーフローしなくなるまでのばして、その位置に合わせて隣にある価格のテキストフレームを動かす…とか。いかにもありそうでしょ?でもできない。

でも、実際これができないと、かなり使える範囲が制限されてしまうので…そこで私が考えた苦肉の策。

まず、ひな形になる小組にはそれぞれスクリプトラベルで名前をつけておきます。
ひな形をグループ化します。グループ化は、すべてのオブジェクトをまとめて1回だけにします(あ、この時点でタネがわかる人いそう…)

んで、このひな形に対して、データ結合を行います。

出来上がったドキュメント、流し込まれた小組に対してオーバーフローしている物を探し、そのオーバーフローしているオブジェクトに対して
set parent_group to parent
で、親になっているグループのIDをとります。

あとは、スクリプトラベルでつけた名前と、グループのIDを利用して
tell parent_group
tell (item 1 of (page items whose label is equal to "○○○○"))--"○○○○"はラベルでつけた名前
end tell
end tell

…って感じで…。
ああ、自分で書いてても思うけど、無理矢理だ(笑)

流し込み中の分岐処理もできないので(たとえば、品番が○○番台は文字の色を変える…といった処理)いったんデータ結合を行った後に処理します。
これも
(every text frame whose label is equal to "品番" and contents = "○○")
みたいにして、目標となる小組を探って、そのあとget parentで…。

……これ、あんまりやる事が増えてくると、はっきりいって、一つ一つ流し込みしたほうが早い!って事になります、多分(笑)

つーか、もっといいやり方知っている人(いるはずだ!)教えてください。