Archive for the 'Keynote 5' Category

2014/02/11 EventScripts経由でiPhoneからKeynoteをコントロール

EventScriptを用いて、iPhoneからMac上のKeynoteをコントロールするためのAppleScriptを何本か書いてみました。

Keynoteをコントロールするさまざまな手段

昔から、プレゼンを操作するためのリモコンのたぐいは、サードパーティの赤外線リモコン、Apple純正のApple Remote、iPhone用のApple純正Keynote Remoteアプリなど、さまざまなものが存在しています(た?)。

img_0553.JPG
▲左から、Keyspan Remote(なつかしい!)、Apple Remote(赤外線I/Fは現行ノート系Macには非搭載)、iOSのRemoteアプリ

そうした他のソリューション(主にAppleのiOS用Keynote Remote)が存在している中でEventScriptsをあえて使う意義はどこに? という話になりますが、「AppleScriptによるインテリジェントな操作が可能」のひとことにつきます。

Keynoteのコントロール

Keynote……ただし、バージョン5.x(iWork 11)系は、さまざまなAppleScript命令を備えています(Keynote 6.x系はまだ出来が不十分なのでゴミ箱行き。日常的にはKeynote 5.xを使っています)。

一番「やってはいけない」操作方法は、System Events経由でキーコードを送る原始的な方法です。もう、それだとAppleScriptを使う意味がない。

Keynoteでドキュメントを開いているのか、スライドの実行中なのか……などなどの「状態」を取得して、状況に合った処理を行うことが重要です。さらに、スライド中のタイトルをAppleScript側から読み取って、スライドのページをめくるたびにタイトルをTwitterに特定タグつきで投稿するなどの「複数の動作」をいっぺんに行えるのもAppleScriptを利用するメリットです。

普通にKeynoteに用意されているAppleScript用語辞書を用いて、普通にAppleScriptを書かないと本来の機能が活かせないので意味がありません。

img_0555.jpg
▲EventScripts RemoteでMac上のKeynoteをコントロールするAppleScriptを実行

これらのAppleScriptをEventScriptsに登録して、iPhone上のEventScripts Remoteからコントロールすれば、Keynoteを自由にコントロールできるようになります。

他のアプリケーションについても、「まっとうな」コントロール方法を用いて操作すると非常に便利です。

スクリプト名:Keynoteのスライドを開始
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aP to playing
      
      
set dCount to count every slideshow
      
      
if aP = false then
        if dCount > 0 then
          start
        else
          say “現在、キーノートでは、プレゼン資料を、オープンして、おりません。” using “Kyoko”
        end if
      else
        –say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを次へ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        show next
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを前へ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        show previous
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを最初のページへ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        show first slide of slideshow 1
      else
        say “現在、キーノートでは、プレゼン、資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを最後のページへ
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        tell slideshow 1
          set pCount to count every slide
        end tell
        
        
show slide pCount of slideshow 1
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Keynoteのスライドを中断
on run eventArgs
  if application “Keynote” is running then
    tell application “Keynote”
      set aF to frontmost
      
set aP to playing
      
      
if {aF, aP} = {true, true} then
        stop slideshow
      else
        say “現在、キーノートでは、プレゼン資料の、再生を、行って、おりません。” using “Kyoko”
      end if
      
    end tell
  else
    say “キーノートは、実行されて、いません。”
  end if
  
end run

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2013/04/27 Keynoteのスライドショー再生中に再生中のスライド番号を取得して音声でレポートする

Keynoteのスライドショー再生中に、再生中のスライド番号(ページ番号)を取得して音声で報告するAppleScriptです。OS X 10.8+Keynoteバージョン5.3で動作確認を行いました。

Keynoteのスライドショー(書類)のうち、どのページを再生中かを取得して音声で報告します。とくに、音声で読み上げる必要性はないのですが、動作内容を理解しやすくするためのテストプログラムなのでこのような実装になっています。

また、アプリケーション(Keynote)の状態を取得して、スライドショーの再生中にのみページ数の読み上げ動作を行います。

本AppleScriptは、アプリケーション形式で、かつ「ハンドラの実行後に終了しない」にチェックを入れた、いわゆる常駐型のアプレットの形式で保存して、保存したアプレットを起動するようにしてください。

スクリプト名:keynoteSlideShowNumberTalker
on run
  
  
end run

on idle
  –Slide Showの再生中かどうかを判定
  
tell application “Keynote”
    set pF to playing
  end tell
  
  
–Slide Show再生中のみスライド番号を読み上げる
  
if pF = true then
    tell application “Keynote”
      tell slideshow 1
        set aSlideNum to slide number of current slide
      end tell
    end tell
    
    
say (aSlideNum as string)
    
  end if
  
  
return 5
  
end idle

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2012/08/25 Keynoteで発表者ノートの一覧を取得する

Keynote(Keynote 09)でオープン中のKeynote書類に書かれている「発表者ノート」の一覧を取得するAppleScriptです。

keynote1.png

とりあえず、簡単にできることをメモしておいたぐらいの内容ですが、指定フォルダ以下のkeynote書類をすべてSpotlight(mdfind)で検出して、順次オープンして「書類名」「タイトル」「発表者ノート」などをいっさいがっさい集めるような、そういうAppleScriptに進化させていくのがよいでしょう。

スクリプト名:Keynoteで発表者ノートの一覧を取得する
tell application “Keynote”
  tell slideshow 1
    set sCount to count every slide
    
set nList to {}
    
    
repeat with i from 1 to sCount
      
      
tell slide i
        try
          set aNotes to notes
        on error
          set aNotes to “”
        end try
      end tell
      
      
set the end of nList to aNotes
      
      
    end repeat
  end tell
end tell

nList
–> {”いちまいめー”, “にまいめー”, “さんまいめー”, “よんまいめー”}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

もっと短く書けました。わざわざループ展開しなくても大丈夫でした。

スクリプト名:Keynoteで発表者ノートの一覧を取得する v2
tell application "Keynote"
  tell slideshow 1
    set nList to notes of every slide
  end tell
end tell

nList
–> {"いちまいめー", "にまいめー", "さんまいめー", "よんまいめー"}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2011/12/03 Keynote 5.1.1でAppleScript用語辞書に変更アリ

ソフトウェアアップデートから、Keynote 5.1.1のアップデートが入手可能になっています。さっそく、AppleScript用語辞書を前バージョンであるKeynote 5.1と比較したところ、exportコマンドの仕様に変更が加わっていることが判明しました。

Keynote 5.1では、「export html」という命令だったのが、同5.1.1では「export as HTML」という命令に変更になっています。

記述サンプル(動作確認ずみ)を以下に示します。何かKeynote書類をオープンした状態で実行してください。

スクリプト名:Keynote 5.1.1で変更されたexportコマンドのパラメータ実験
set outFile to choose file name

–Keynote 5.1.1で変更されたexportコマンドのパラメータ実験
tell application “Keynote”
  tell slideshow 1
    export to outFile as HTML
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

ここで指定するパスは、普通にalias形式で大丈夫です(同じKeynote内の命令でも「add file」が要求するのはPOSIX pathですが)。ちなみに、「as HTML」を指定しないと……何も起こらないので、現バージョンでは「as HTML」オプションの記述が(省略可能なようにAppleScript用語辞書には書かれていますが)必須です。

ちなみに、上記のAppleScriptを実行すると指定名称のフォルダが作成され、その中にインタラクティブな操作が可能なHTMLコンテンツが生成されます(出来がよくてビックリ)。

keynote511_1.jpg

keynote511_2.jpg

Keynoteからの各種形式での書き出しは、自動処理できたほうが有用なので、ぜひともほかの形式の書き出しについても「as」で指定できるようにしていただきたいところです。とくに、PDFとepub。

Keynoteはもっと根本的にAppleScriptの自動処理に対応できるように改良すべきです。

2011/06/13 Keynoteの各slideのtitleから目次のテキストを作成する

iWork 09のKeynote 5.0.5で、各スライド(slide)のタイトルを読み取って目次のテキストを作成するAppleScriptです。

本Scriptでslideのtitleを取得するためには、スライドを作成する際にKeynoteのテンプレート(マスタースライド)機能を用いて、Keynoteが期待しているtitle欄の枠を使用するようにKeynote書類を作る必要があります。

自分は、無地のマスタースライドを選んで、好き勝手に文字やらグラフィックを配置するのが好きなのですが、そのやり方では(膨大な資料をKeynoteで作ってしまうと)目次を作ったり連番のスライドのリナンバー作業が大変です。

AppleScriptからデータを取りやすいよう、根本的に作業スタイルを変えてみました。新規スライド作成(ページの追加)時にはかならずマスタースライドを適用するようにしました。逆に、この機能を利用してスライドを作らないとAppleScriptからタイトルの取得を行おうとしても無意味な値しか返ってきません。

key1.jpg
▲表紙のタイトル部分のスライド。マスタースライドで「タイトル(中央)」を指定している

key2.jpg
▲内容部分のスライド。マスタースライドで「タイトル(上)」を指定している

スライド中で、1つの内容について複数枚にわたって説明するようなケースがあり、もし3枚に渡って説明する場合には、

「ひよこさんの特徴(1/3)」「ひよこさんの特徴(2/3)」「ひよこさんの特徴(3/3)」

などとタイトル末尾にナンバーを振ることになっています(慣習上)。

目次データ作成時にはこのナンバーを振っている内容については同一内容であると認識して、(2/3)や(3/3)は目次に含めないようにしています。

key4.jpg

key5.jpg

key6.jpg

ためしに、あるKeynote書類の目次をこのAppleScriptで作ってみました。

実行結果:
2 メディアの変遷
5 コンピュータ/通信業界「主役」の変遷
6 携帯キャリアを軸とした情報通信における競合と協業
7 ラジオ関連のタイムテーブル
8 V-Lowデジタルラジオに対するNHKの見解
9 V-HighとV-Lowの電波帯域
10 デジタルラジオの技術的仕様
11 参考資料:ISDB放送規格
12 参考資料: マルチメディア放送企画LLC合同会社
13 参考資料:V-LOW放送の地域ソフト会社一覧
14 デジタルラジオ受信機とは何か?
15 デジタルラジオ放送は「聴いただけでは分からない」
16 音声コンテンツへの需要は?
17 いまやリアルタイム視聴・聴取は不可能
18 各放送メディアのトレンド
19 ユーザーの可処分時間の最後のフロンティアは「移動時間」
20 貴重な移動時間を活用できるのが音声コンテンツの強み

このように、Keynoteでプレゼン資料というよりは、文字中心でページ数の多い仕様書や報告書を作った場合でも、AppleScriptでタイトルを走査してかんたんに目次用のテキストを作成できます。

個人的には、ものすごく助かりました。

スクリプト名:Keynoteの各slideのtitleから目次のテキストを作成する
set separatorC to “(” –「(1/3)」の形式で連番を振っている場合の最初のカッコを書いておく。ここでは、全角カッコを想定

–Keynoteの各slideのタイトルを取得する
set aList to {}

tell application “Keynote”
  tell slideshow 1
    set aList to title of every slide
  end tell
end tell

–各タイトルにすでに「(1/2)」のようなナンバリングが行われていたらナンバリング部分を削除する
set newList to {}

repeat with i in aList
  set j to contents of i
  
  
set aPos to offset of separatorC in j
  
if aPos is not equal to 0 then
    set j to text 1 thru (aPos - 1) of j
  end if
  
  
set the end of newList to j
end repeat

–目次を作成する
set sPage to 3 –ページ数カウンタ
set curItem to second item of newList
set newList2 to items 3 thru -1 of newList

set outList to {{2, curItem}} –出力用データ

repeat with i in newList2
  set j to contents of i
  
  
if j = curItem then
    –何もしない
  else
    set curItem to j
    
set the end of outList to {sPage, j}
  end if
  
  
set sPage to sPage + 1
  
end repeat

set aText to retItemDelimedAndParagraphDelimedText(outList, tab, return) of me

–入れ子のリストを、アイテム間のデリミタとパラグラフ間のデリミタを指定してテキスト化
–というか、入れ子のリストをタブ区切りテキストにするのが目的
on retItemDelimedAndParagraphDelimedText(aList, itemDelim, paragraphDelim)
  set aText to “”
  
  
repeat with i in aList
    set aStr to retDelimedText(i, itemDelim) of me
    
set aText to aText & aStr & paragraphDelim
  end repeat
  
  
return aText
end retItemDelimedAndParagraphDelimedText

on retDelimedText(aList, aDelim)
  set aText to “”
  
set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set aText to aList as text
  
set AppleScript’s text item delimiters to curDelim
  
return aText
end retDelimedText

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2011/06/10 Keynoteの各slideのtitleで、同じものが続く箇所に連番を振り直す

Keynote 5.0.5(iWork 09)で、現在オープン中のKeynote書類の各スライドのタイトルをスキャンして、タイトル末尾に「(1/3)」のように連番を振っている箇所に、連番を振り直すAppleScriptです。

AppleScriptからは、煮ても焼いても喰えなかったKeynoteでしたが、かなり有用性の高いAppleScriptができたように思います。まだ、実地での検証が不足していますが……それでも、枚数のやたらと多い資料などを作ってしまいがちな人には便利な道具になることでしょう。

スクリプト名:Keynoteの各slideのtitleで、同じものが続く箇所に連番を振り直す
set separatorC to "(" –「(1/3』」の形式で連番を振っている場合の最初のカッコを書いておく。ここでは、全角カッコを想定

–Keynoteの各slideのタイトルを取得する
set aList to {}

tell application "Keynote"
  tell slideshow 1
    set aList to title of every slide
  end tell
end tell

–各タイトルにすでに「(1/2)」のようなナンバリングが行われていたらナンバリング部分を削除する
set newList to {}

repeat with i in aList
  set j to contents of i
  
  
set aPos to offset of separatorC in j
  
if aPos is not equal to 0 then
    set j to text 1 thru (aPos - 1) of j
  end if
  
  
set the end of newList to j
end repeat

–重複箇所の情報を取得する
set sList to detectRepetition(newList) of me
if sList = {} then
  tell application "Keynote"
    display dialog "とくに、連番を振り直す必要のある箇所はないようです" buttons {"OK"} default button 1 with icon 1
  end tell
  
return
end if

–重複箇所情報をもとに連番を振り直す
set tList to {}

repeat with i in sList
  set {fromNum, endNum} to i
  
set totalNum to endNum - fromNum + 1
  
  
set preStr to contents of item fromNum of newList
  
  
set ttList to {}
  
repeat with ii from 1 to totalNum
    set aStr to ((preStr & "(" & ii as string) & "/" & totalNum as string) & ")"
    
set item (ii + fromNum - 1) of newList to aStr –newListの内容を書き換えている
  end repeat
  
end repeat

–連番を振り直したリストを元に、Keynoteの各slideのtitleを変更する
tell application "Keynote"
  tell slideshow 1
    set sCount to count every slide
    
repeat with i from 1 to sCount
      tell slide i
        set title to contents of item i of newList
      end tell
    end repeat
  end tell
end tell

–リスト中の値が連続する箇所をアイテム番号のリストで返す
on detectRepetition(aList)
  
  
set curItem to first item of aList
  
set aList to rest of aList
  
  
set aCount to 1
  
set sucF to false
  
  
set sList to {}
  
set curList to {}
  
  
repeat with i in aList
    set j to contents of i
    
if curItem is equal to j then
      if sucF = true then
        –何もしない。データの連続部分の中をスキャン中  
      else
        set curItem to j
        
set curList to {aCount}
        
set sucF to true
      end if
    else
      if sucF = true then
        –連続部分の末尾を見つけた
        
set the end of curList to aCount
        
set the end of sList to curList
        
set curList to {}
        
set curItem to j –ここを修正した
        
set sucF to false
      else
        –なにもしない
        
set curItem to j
      end if
    end if
    
    
set aCount to aCount + 1
  end repeat
  
  
if sucF = true then
    set the end of curList to aCount
    
set the end of sList to curList
  end if
  
  
return sList
  
end detectRepetition

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/10/28 Keynoteに画像を一括で登録する

Keynote 5.0.3で、指定フォルダ内の画像を取得してKeynoteのスライド上に1ページあたり1点の画像を中央に配置。すべての画像をKeynote上に連続配置するAppleScriptです。

key1.jpg

key2.jpg

フォルダ内の画像については、リストで指定した順序がそのまま反映されるので、Keynoteに渡す前にソートするとか、元のファイル名に細工をするといったことは必要になるかもしれません(Mac OS X 10.5上でスクリーンキャプチャしたファイルは、「ピクチャ 1」といった名前になるため、1桁の数字のファイルは「ピクチャ 01」などにリネームしておくとか)。

Keynoteに画像ファイルのパスを渡す際に、POSIX path以外では通らないようです。また、quoted form ofでクオート処理を行うと配置してくれませんでした。

さらに、この処理自体が不安定なようなので……もし一度AppleScriptから実行してうまくいかなかったときには、Keynoteを一度終了させてから再度起動して、リトライしてみてください。

なんにせよ、画像点数が多い場合にはひじょーーに便利です。

スクリプト名:Keynoteに画像を一括で登録する
–画像が入っているフォルダを選択
set a to choose folder

–指定フォルダ中のファイル(たぶん画像)を一括でaliasとして取得
tell application “Finder”
  tell folder a
    set fList to every file as alias list
  end tell
end tell

–Keynoteが各ファイルのパスをtextで要求しているので、aliasからtextにcastする
set fnList to {}
repeat with i in fList
  set the end of fnList to (POSIX path of (contents of i))
end repeat

–Keynoteに1ページに1枚の画像を配置したスライドを一括作成する
tell application “Keynote”
  tell slideshow 1
    make image slides paths fnList
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2009/02/11 Keynote上でコピーされたテキストオブジェクトの内容をTextEditで解析してIllustratorで白フチ文字を作成してKeynoteにペースト

iWork ‘09のKeynote 5.x上で文字オブジェクトをコピーし、実行すると白フチ文字に変換してKeynote上にペーストする(趣味の)AppleScriptです。

まずは、Keynote上で文字オブジェクトをコピーして本Scriptを実行。

keynote1.jpg

クリップボードに入っているデータ(Ritch Text Format)をテキストエディットの新規書類にペースト。テキストエディット上で書式などを分析します。分析したら、用済みのテキストエディット書類は破棄。

テキストエディット上で得られた情報をもとに、今度はIllustrator CS3上で同様にオブジェクトを組み立て、白フチ文字を作成。白フチ文字のオブジェクトをコピーして、Illustrator書類を破棄します。

最後に、Keynoteを最前面に持ってきてSystem Eventsで(GUI Scriptingで)ペースト操作を実行。

keynote2.jpg

keynote3.jpg

以前に作成しておいたルーチンに一部手を加えて、縦方向の文字(1文字ごとに改行)でも、横方向の文字(通常)でも対応します。ただし、本バージョンではオリジナルのフォント情報までは白フチ文字に反映していません。

keynote4.jpg

スクリプト名:Keynote上でコピーされたテキストオブジェクトの内容をTextEditで解析してIllustratorで白フチ文字を作成してKeynoteにペースト

何もコピーされていなければリターン
set a to the clipboard
if a = “” then return

Text Editで新規ドキュメントを作成してコピーされていたデータをコピー
tell application TextEdit
  set aDoc to make new document
  
activate
end tell

tell application System Events
  tell process TextEdit
    keystroke v using {command down}
  end tell
end tell

TextEditの書類上から各種情報を取得する
tell application TextEdit
  tell text of aDoc
    set colorList to color of every attribute run
    
set fontList to font of every attribute run
    
set sizeList to size of every attribute run
    
set textList to characters of every attribute run
    
    
set itemCount to length of colorList
    
    
set contList to {}
    
repeat with i from 1 to itemCount
      set aRec to {textData:(item i of textList) as string, colorData:item i of colorList, fontData:item i of fontList, sizeData:item i of sizeList}
      
set the end of contList to aRec
    end repeat
  end tell
end tell

tell application TextEdit
  tell document 1
    close without saving
  end tell
end tell

set aDirection to detectTextDirection(textList) of me
> “vertical” / “horizontal”

set aFontName to contents of item 1 of fontList
set aSize to contents of item 1 of sizeList
set aLineWidth to aSize / 8
set aLineWidth to round aLineWidth rounding up

set aCon to textList as string
set aCon to repChar(aCon, ASCII character 10, “”) of me
set aColor to item 1 of colorList
set rColor to (item 1 of aColor) / 256
set rColor to round rColor rounding down
set gColor to (item 2 of aColor) / 256
set gColor to round gColor rounding down
set bColor to (item 3 of aColor) / 256
set bColor to round bColor rounding down
set colorList to {rColor, gColor, bColor}

makeTextGraphicWithEdgeLine(aCon, aSize, aLineWidth, aDirection, aFontName, colorList) of me

tell application Keynote
  activate
end tell

tell application System Events
  tell process Keynote
    keystroke v using {command down}
  end tell
end tell

以下、サブルーチン

Attribute runsのテキストデータの並びから、Keynote上で縦書き/横書きだったかの判定を行う
on detectTextDirection(aList)
  set normCount to 0
  
set retCount to 0
  
log aList
  
repeat with i in aList
    set jj to contents of (item 1 of i)
    
set j to id of (contents of jj)
    
display dialog (string id of j)
    
if (j = 10) or (j = 13) then
      set retCount to retCount + 1
    else
      set normCount to normCount + 1
    end if
  end repeat
  
  
set vhCalc to (retCount / normCount)
  
  
if vhCalc > 0.5 then
    return vertical
  else
    return horizontal
  end if
  
end detectTextDirection

on makeTextGraphicWithEdgeLine(aCon, aSize, aLineWidth, aDirection, aFontName, colorList)
  copy colorList to {rColor, gColor, bColor}
  
  
using terms from application Adobe Illustrator
    tell application Adobe Illustrator
      set aDoc to make new document with properties {color space:RGB}
      
      
tell aDoc
        setOriginToLeftCorner() of me
        
        
set aGroup to make new group item
        
        
set aFrame1 to make new text frame at the end of aGroup
        
tell aFrame1
          set position to {0, 0}
          
set contents to aCon
          
if aDirection = vertical then
            set text orientation to vertical
          else if aDirection = horizontal then
            set text orientation to horizontal
          end if
          
tell every character
            set size to aSize
            
set font to aFontName
            
set stroke weight to aLineWidth ふちどり線の太さ
            
set stroke color to {red:255, green:255, blue:255}
          end tell
        end tell
        
        
set aFrame2 to make new text frame at the beginning of aGroup
        
tell aFrame2
          set contents to aCon
          
set position to {0, 0}
          
if aDirection = vertical then
            set text orientation to vertical
          else if aDirection = horizontal then
            set text orientation to horizontal
          end if
          
tell every character
            set size to aSize
            
set font to aFontName
            
set stroke weight to 0.0
            
set fill color to {red:rColor, green:gColor, blue:bColor}
          end tell
        end tell
        
        
        
set selection to aGroup
        
copy ふちどり文字をクリップボードにコピー
        
        
close saving no Illustratorの書類を破棄する
      end tell
    end tell
  end using terms from
end makeTextGraphicWithEdgeLine

Illustratorの原点座標を変更する
on setOriginToLeftCorner()
  using terms from application Adobe Illustrator
    tell application Adobe Illustrator
      tell document 1
        set aHeight to height
        
set ruler origin to {0, aHeight}
      end tell
    end tell
  end using terms from
end setOriginToLeftCorner

Written By Philip Aker
文字置換ルーチン
on repChar(origText, targStr, repStr)
  set {txdl, AppleScript’s text item delimiters} to {AppleScript’s text item delimiters, targStr}
  
set temp to text items of origText
  
set AppleScript’s text item delimiters to repStr
  
set res to temp as text
  
set AppleScript’s text item delimiters to txdl
  
return res
end repChar

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/10/06 Keynoteでslideの情報を取得する

Keynoteで、現在開いている書類(slideshow 1)の情報を取得するAppleScriptです。

slideshow 1の中に複数枚のslideがあって、現在選択中のslideは「current slide」、ファイルのパスは「path」で取得できるものの、なぜかPOSIX pathが返ってきます。

Apple純正のアプリケーションでも、書類のfile pathについては統一がとられておらず、POSIX pathだったりMac OS形式のFile Pathが帰ってくることがあったりと、気をつけておかなくてはならない部分です。きちんと、AppleScriptチームがアプリの仕上がりについて目を光らせてチェックしておく必要があるはずですが、そこまで手が回っていないようです。

スクリプト名:Keynoteでslideの情報を取得する
tell application Keynote
  tell slideshow 1
    properties
  end tell
end tell

> {modified:false, current slide:slide “0″ of document “test” of application “Keynote”, class:document, path:”/Users/maro/Desktop/test.key”, playing:false, name:”test”}

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に