[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1577) [AS_InDesign CS3]フォントの置換



(*
Replace_font.applescript
複数のフォントの置換をします。

http://bbs.ddc.co.jp/mt/indesignbbs/archives/10799_20070214164800.html
にあるfourさん(http://psychocat.net/scriptNote/)のスクリプトの改良。
複数のフォントを一度に置換できるようにした。

2007.07.01	ver.0.1	起こし
*)
--===================================★ここから 書き換えてください
--fonts_oldには置き換えたいフォント名。「ファミリー名(タブ)スタイル」に。空行は無視します。
set fonts_old to "
リュウミンR-KL	Regular
新ゴL	Regular
新ゴM	Regular
" as Unicode text

--fonts_newには置き換えるフォント名。上のfonts_oldと行で対になるようにしてください。
set fonts_new to "
A-OTF リュウミン Pro	R-KL
A-OTF 新ゴ Pro	L
A-OTF 新ゴ Pro	M
" as Unicode text

--段落スタイル中のフォントも置き換えたい場合はここを「true」に。そうでない場合は「false」にしてください。
set paragraph_style to true

--===================================★ここまで 書き換えてください

my doc_exists()
tell application "Adobe InDesign CS3"
	set fonts_app to name of every font --現在使用できるフォントリスト
	tell document 1
		set fonts_doc to name of every font --ドキュメントで使用されているフォントリスト
		set fonts_nothing to my cannotuse_fonts(fonts_app, fonts_doc)
		if fonts_nothing is not "" then my my_error("(参考)以下のフォントはシステムにありません。" & return & "置き換えリストに含まれていれば置換します" & return & fonts_nothing, false)
	end tell
end tell

repeat with i from 1 to count paragraph of fonts_old
	set a_font_old to (paragraph i of fonts_old) as Unicode text
	set a_font_new to (paragraph i of fonts_new) as Unicode text
	if a_font_old is not ("" as Unicode text) then --空行でないなら以下を実行
		if a_font_new is not in fonts_app then my my_error("(警告)" & a_font_new & "はシステムにないフォントです。", false)
		if paragraph_style then my replace_para_style(a_font_old, a_font_new)
		my replace_font(a_font_old, a_font_new)
	end if
end repeat


----------------------------------●ドキュメントが開かれているかどうか
to doc_exists()
	tell application "Adobe InDesign CS3"
		if not (exists document 1) then
			activate
			my my_error("ドキュメントが開かれていません", true)
		end if
	end tell
end doc_exists

----------------------------------●現在の環境で使用できないフォントリストを作成
to cannotuse_fonts(fonts_app, fonts_doc)
	set tmp_str to "" as Unicode text
	repeat with i in fonts_doc
		if i is not in fonts_app then set tmp_str to tmp_str & i & return
	end repeat
	return tmp_str
end cannotuse_fonts

----------------------------------●段落スタイル置換
on replace_para_style(a_font_old, a_font_new)
	tell application "Adobe InDesign CS3"
		tell document 1
			set para_style to every paragraph style
			repeat with i in para_style
				set font_name to name of applied font of i
				if font_name is a_font_old then
					set a_font_new to my as_split(tab, a_font_new)
					set properties of i to {applied font:item 1 of a_font_new, font style:item 2 of a_font_new}
				end if
			end repeat
		end tell
	end tell
end replace_para_style

----------------------------------●フォント置換
to replace_font(a_font_old, a_font_new)
	tell application "Adobe InDesign CS3"
		tell document 1
			try
				set applied font of text style ranges of stories whose name of applied font is a_font_old to a_font_new
			on error errMsg number errNum
				my my_error("以下のフォント置換でエラー" & return & a_font_old & return & a_font_new & return & errMsg & errNum, false)
			end try
		end tell
	end tell
end replace_font





----------------------------------○エラー処理
to my_error(err_str, my_stop)
	set err_str to err_str as Unicode text
	if my_stop then
		set my_stop to {"中止"}
	else
		set my_stop to {"中止", "続行"}
	end if
	tell application "Adobe InDesign CS3"
		activate
		beep
		set ANS to button returned of (display dialog err_str buttons my_stop) --警告ダイアログ出してストップ
		if ANS is "中止" then error number -128
	end tell
end my_error

----------------------------------○文字列をリストに分割する
to as_split(thedelimit, theText)
	set oldDelim to AppleScript's text item delimiters
	set AppleScript's text item delimiters to thedelimit
	set tmpList to every text item of theText
	set AppleScript's text item delimiters to oldDelim
	if length of tmpList is 1 then set tmpList to tmpList & {""} -------★今回のみの処理
	return tmpList
end as_split