Archive for the 'Keynote 7' Category

2017/03/28 Keynote/Pages/Numbersがアップデート

Keynote/Pages/Numbersがアップデートし、それぞれKeynote 7.1、Pages 6.1、Numbers 4.1になりました(要macOS 10.12)。

■Keynote 7.1.0
–AppleScript用語辞書の変更点
・current slideがread only属性ではなくなった
・image formatで指定できる値が変更された
small / medium / large –> 60p / 540p / 720p / 1080p / 2160p / native size
・movie formatで指定できる値が変更された
small / medium / large –> 360p / 540p / 720p / 1080p / 2160p / native size
–機能上の変更点
・PDF書き出しをmacOS 10.12.4上で行えるようになった(権限エラーが出なくなった)

■Pages 6.1.0
–AppleScript用語辞書の変更点
・exportコマンドで指定できるフォーマットとして「formatted text」が追加された(RTF?)
–機能上の変更点
・PDF書き出しをmacOS 10.12.4上で行えるようになった(権限エラーが出なくなった)

2017/01/10 Keynote書類の画像書き出しテスト

Keynote書類をデスクトップに画像書き出し(PNG形式)するAppleScriptです。動作確認はmacOS 10.12.3beta+Keynote 7.0.5で行っています。

macOS 10.12.x+Keynote 7.0.5ではSandbox化の影響を受けてexportコマンドがうまく動作していないようで、そのままPDF書き出しを実行するとError 6に遭遇しました。これを回避するために、PDF書き出し前にPDFと同名の空のファイルを作るとよいことがわかりました。

sandboxed_export.png

AppleScriptからKeynoteに書類の画像書き出しを行うとError 6に遭遇するのはPDF書き出しと事情は変わりません。何らかの対策を行う必要があります。

画像書き出しは指定の場所にフォルダが作成されて、さらにその中にスライド画像が連番つきで書き出されます。1つのPDFができるPDF書き出しとは若干動作が異なるわけです。

試行錯誤したところ、書き出しフォルダと同じ名前のフォルダを、画像書き出し前にあらかじめ作っておけばエラーを回避できることがわかりました。

同様に、macOS 10.12上ではSandbox化されたアプリケーション上でのexportコマンドの挙動に問題があることが報告されており、ここで示したようなやり方で回避できているようです。具体的には、Mailの添付ファイルの書き出しがこれでSandbox由来のエラーを回避できた事例が報告されています。

一方で、Microsoft Word 2016/Excel 2016においてAppleScriptからExportを行わせたときに上記の回避策ではSandbox由来のエラーを回避できず、海外のScripter連中と回避策を相談しているところです。

Appleにはフィードバック済みですが、かなり問題のある動作に見えます。

AppleScript名:Keynote書類の画像書き出しテスト
– Created 2017-01-10 by Takaaki Naganoya
– 2017 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
–http://piyocast.com/as/archives/4384

tell application “Keynote”
  if (count every document) = 0 then error “There is no Keynote Document”
  
set aDoc to document 1
end tell
set kRes to exportImagesFromKeynote(aDoc) of me

on exportImagesFromKeynote(aDoc)
  tell application “Keynote”
    set aPath to file of aDoc
  end tell
  
  
set tmpPath to (path to desktop) as string
  
set curPath to (current application’s NSString’s stringWithString:(POSIX path of aPath))’s lastPathComponent()’s stringByDeletingPathExtension()
  
set outPath to (tmpPath & curPath)
  
  
–This preliminary process may be no use if macOS or Keynote fixed in the future
  
do shell script “mkdir “ & quoted form of POSIX path of outPath –To Avoid “Error 6″ (Keynote 7.0.5+macOS 10.12.2/3)
  
–This preliminary process may be no use if macOS or Keynote fixed in the future
  
  
tell application “Keynote”
    set anOpt to {class:export options, compression factor:1.0, image format:PNG, export style:IndividualSlides, all stages:false, skipped slides:true}
    
export document 1 to file outPath as slide images with properties anOpt
  end tell
  
  
return (outPath as alias)
end exportImagesFromKeynote

★Click Here to Open This Script 

2017/01/09 Keynote書類をデスクトップにPDFで出力する

Keynote書類をデスクトップにPDFで出力するAppleScriptです。動作確認はKeynote v7.0.5で行いました(初回掲載分からアップデート)。

Keynoteから出力したPDFに対し、Keynote書類の構造を確認しつつ、階層構造つきのTOC(しおり)を付加するAppleScriptを作成したときに作ったものです(KeynoteでPDF書き出ししただけでは、階層構造つきのTOCなんて気のきいたものはついてきませんので)。

keynote_leveled_toc.png

exportコマンドによる出力先のフォルダに、当初temporary items folderを指定してみたのですが、ユーザー権限がないと言われて書き込めませんでした。Keynoteはサンドボックス化されたアプリケーションなので、ホームディスレクトリの下のどこかを一時作業フォルダとして使うように運用を変更する必要があることでしょう(temporary items folderの存在意義が、、、、)。

【重要! 生死に関わるレベル】

macOS 10.12.3beta上で、exportコマンド実行時にエラー(Error 6)になることがあり、原因 を調査したところ、すでにexport先に同名のファイルが存在する場合にはエラーにならないことがわかりました。Sandbox化の影響を受け、Keynote自体がファイルを書き出せない状態にあったようなので、shellのtouchコマンドで書き出すPDFと同名の(空っぽの)ファイルをあらかじめ作成しておいてからexportコマンドを実行したところうまく行きました。

AppleScript名:Keynote書類をデスクトップにPDFで出力する v1.1
– Created 2017-01-09 by Takaaki Naganoya
– 2017 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
–http://piyocast.com/as/archives/4380

tell application “Keynote”
  set dCount to count every document
end tell

if dCount = 0 then
  display dialog “オープン中のKeynote書類はありません” with icon 0 with title “No Document Error”
  
return
end if

tell application “Keynote”
  set aPath to file of document 1
end tell

–Keynote書類のファイル名だけを取り出し、拡張子を外し、別の拡張子(.pdf)を追加する
set curPath to (current application’s NSString’s stringWithString:(POSIX path of aPath))’s lastPathComponent()’s stringByDeletingPathExtension()’s stringByAppendingString:“.pdf”

set tmpPath to (path to desktop) as string
set outPath to tmpPath & (curPath as string)

do shell script “touch “ & quoted form of POSIX path of outPath

tell application “Keynote”
  set anOpt to {class:export options, export style:IndividualSlides, all stages:false, skipped slides:true, PDF image quality:Best}
  
export document 1 to file outPath as PDF with properties anOpt
end tell

★Click Here to Open This Script