// 雑記 2012年12月 "); } }

雑記

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[AppleScript ][InDesign]データ結合後のずれを補正

TwitterでAdobe InDesignの機能、データ結合の話題が出た際に、「結合後にずれる」と言う話が……。
各者検証をはじめる。(今調べたら、ずいぶん前から言われてたんですね。help

@assause氏の検証結果

なんと、ptでも小数点以下は切り捨て!!

最大で約0.3mmの誤差はさすがに大き過ぎと思うのですが……。


そんなこんなでデータ結合後の誤差を補正(移動)するAppleScriptを書いてみました。

データ結合後に実行すると左上の座標を四捨五入し、その位置になるよう個別に移動していきます。
各オブジェクトに対して実行するのでそれなりに時間がかかりますので、手でやった方が早いかもしれません……。


Scriptの実行方法によって大きく速度がかわります。
エディタ上から実行した場合と、メニューバーから実行した場合はほぼ同じです。
どちらかをお勧めします。

ものすご〜〜〜く遅いのはアプリケーション形式で保存してそれを実行した場合です。
対象ページが増えるほどより遅くなっていく感じで、私がテスト計測した場合ですと、2〜3倍かかりました。

実行速度の計測時に気がついのたですが、スクリプトタブからの実行ではエラーが起きてしまいます。
原因がわかりません……。


今回、生活向上ブログさんのソースを参考にさせていただきました。ありがとうございます。

OS 10.4
Adobe InDesign CS3
にて書いてます。



いつもながら理解が浅くて不細工なソースなので改良点があれば是非ご教示ください!

データ結合誤差修正.applescript.zip



tell application "Adobe InDesign CS3"

activate

tell front document

repeat with i from 1 to count of pages

set a_pread to parent of page i

tell window 1

set active spread to a_pread

zoom given fit spread

end tell

my shortcut("a")

set page_items to every item of selection

set xy to my move_value()

tell page i

repeat with a_itme in page_items

my my_move(a_itme, xy)

end repeat

end tell --tell page i

end repeat

end tell

end tell

on my_move(a_itme, xy)

tell application "Adobe InDesign CS3"

tell front document

tell a_itme

--properties

set xy2 to visible bounds

set xy2 to {(round ((item 1 of xy2) * 1000) rounding to nearest) / 1000, (round ((item 2 of xy2) * 1000) rounding to nearest) / 1000}

set a to {(item 1 of xy2) - (item 1 of xy), (item 2 of xy2) - (item 2 of xy)}

move a_itme to {item 2 of a, item 1 of a}

end tell

end tell

end tell

end my_move

on move_value()

tell application "Adobe InDesign CS3"

tell front document

my shortcut("g")

set page_items to every item of selection

tell page_items

set visible_bounds to visible bounds

set xy2 to {(item 1 of visible_bounds), (item 2 of visible_bounds)}

set xy1 to {round (item 1 of visible_bounds), round (item 2 of visible_bounds)}

set xy to {(round (((item 1 of xy2) - (item 1 of xy1)) * 1000) rounding to nearest) / 1000, (round (((item 2 of xy2) - (item 2 of xy1)) * 1000) rounding to nearest) / 1000}

end tell

undo

return xy

end tell

end tell

end move_value

on shortcut(a)

tell application "Adobe InDesign CS3"

activate

tell application "System Events"

tell process "Adobe InDesign CS3"

keystroke a using command down

end tell

end tell

end tell

delay 0.8

end shortcut



スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。