[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1720) [AppleScript][InDesign CS3]ページ番号
セクションのページ番号でスタイルにアラビア数字以外が設定されているとき、
name of page_objは設定されたスタイルの文字列を返します。
仮に漢数字が設定されていれば、漢数字で返ってきます。ローマ数字ならローマ数字として。
しかし、これをアラビア数字で欲しい時もありますね。でもそんなプロパティはありません。
こんなとき、みなさまどうしているのでしょう?
特定のオブジェクトが存在するページ番号を得たいという場合を想定しました。
ものすごく泥臭いやり方ですが。
--------------start(1)
to get_page_num(my_obj)
tell application "Adobe InDesign CS3"
tell document 1
set current_section to "" --カレントセクション
repeat with a_page in every page
tell a_page
if current_section = applied section then
set tmp_page to tmp_page + 1
set page_num to tmp_page
else
set current_section to applied section
tell current_section
set tmp_page to page number start
set page_num to tmp_page
end tell
end if
if my_obj is in all page items then
return {page_num, name}
end if
end tell
end repeat
end tell
end tell
end get_page_num
tell application "Adobe InDesign CS3"
tell document 1
set my_obj to selection
set {current_page_num, current_page_name} to my get_page_num(my_obj)
end tell
end tell
display dialog (current_page_num) as unicode text & " : " & current_page_name
--------------end(1)
うーん、きたない。
汚いうえに、コストが高い。
一度きりならこれでもいいかもしれないけれど、何度もアクセスすると遅いと思います。(たぶん)
じゃあ、ページ番号ごとのオブジェクトのリストを作成して、何度もアクセスする場合のコストを少しでも減らす方法も考えておきましょう。
--------------start(2)
--ドキュメント中のすべてのページ番号とページ名、オブジェクトを返す。
to page_obj_db()
tell application "Adobe InDesign CS3"
tell document 1
set current_section to "" --カレントセクション
set page_num to {} --ページナンバーのリスト
set page_name to {} --ページ名のリスト
set page_obj to {} --ページオブジェクトのリスト
repeat with a_page in every page
tell a_page
set end of page_obj to all page items
set end of page_name to name
if current_section = applied section then
set tmp_page to tmp_page + 1
set end of page_num to tmp_page
else
set current_section to applied section
tell current_section
set tmp_page to page number start
set end of page_num to tmp_page
end tell
end if
end tell
end repeat
return {page_num, page_name, page_obj}
end tell
end tell
end page_obj_db
to get_page_name(my_obj, page_num, page_name, page_obj)
tell application "Adobe InDesign CS3"
tell document 1
repeat with i from 1 to (length of page_obj)
repeat with a_page_obj in item i of page_obj
if my_obj is in a_page_obj then
return {item i of page_num, item i of page_name}
end if
end repeat
end repeat
end tell
end tell
end get_page_name
tell application "Adobe InDesign CS3"
tell document 1
set my_obj to object reference of selection
set {page_num, page_name, page_obj} to my page_obj_db()
set {current_page_num, current_page_name} to my get_page_name(my_obj, page_num, page_name, page_obj)
end tell
end tell
display dialog (current_page_num) as unicode text & " : " & current_page_name
--------------end(2)
あー、気がめいってきた。
いい方法があるといいんですが...