[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