[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)

あー、気がめいってきた。
いい方法があるといいんですが...