Keynoteのタイトルがマスターに入っていなかった場合に、スライドの一番左上に存在するテキストアイテムをタイトルに入れ直すAppleScriptです。
Keynoteで急いでスライドを作ってはみたものの、あわててタイトルをマスタースライドのタイトルオブジェクトに入れていなかった場合に、(見た目は変わらないものの)あとで修正しておく必要があるケースがあります(Keynoteのデータを再利用するような場合とか)。
そこで、現在表示中のスライド中で一番左上に存在するテキストアイテムで、フォントサイズ20ポイント以上、文字色が黒 {0, 0, 0} のものをタイトルとみなして、文字を取得。あらためてマスタースライドのタイトルオブジェクトに文字を入れ直します。
このままだと、色データが{0,0,1}になったぐらいで検出できなくなってしまいますが、Color Domain処理を組み合わせることで「だいたい黒」「黒っぽい色」といった判定が行えるため、組み合わせて使うと効果的でしょう。
▲Before
▲After
AppleScript名:Keynoteでタイトルがマスターに入っていなかった場合に矯正 v2 |
use AppleScript version "2.4" use framework "Foundation" use scripting additions use bPlus : script "BridgePlus" property minTitleFontSize : 20 property targBaseSlide : "タイトル(上)" tell application "Keynote" tell front document set newMaster to master slide targBaseSlide tell current slide set curBaseName to name of base slide –現在のスライド上のすべてのテキストアイテムの座標{x ,y}を取得して最小(一番上)のものを推測 set pList to position of every text item set p2List to sort2DListAscending(pList) of me set mostUpPos to contents of first item of p2List –一番上に存在するテキストアイテムから情報を抽出 set tTextItem to first item of (every text item whose position is mostUpPos) tell tTextItem set tObjText to (object text) set aTitle to tObjText as string set aProp to size of (object text) set aColor to color of (object text) end tell –スライドの一番上に存在するテキストアイテムのフォントサイズが想定以上で、色が黒の場合には –マスタースライドのデフォルトタイトルに、一番上に存在していたテキストアイテムの本文を突っ込む if (aProp ≥ minTitleFontSize) and (aColor = {0, 0, 0}) then –色判定でColor Domain処理を行えば、「黒っぽい色」や「赤っぽい色」を対象にできる if curBaseName is not equal to targBaseSlide then set base slide to newMaster end if delete tTextItem set object text of default title item to aTitle end if end tell end tell end tell –2D Listのソート on sort2DListAscending(aList) load framework set sortIndexes to {0, 1} –Key Item id: begin from 0 set sortOrders to {true, true} –Ascending, Ascending set sortTypes to {"compare:", "compare:"} set bList to (current application’s SMSForder’s subarraysIn:(aList) sortedByIndexes:sortIndexes ascending:sortOrders sortTypes:sortTypes |error|:(missing value)) return bList as list of string or string end sort2DListAscending |
(Visited 47 times, 1 visits today)