それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

AppleScript で PPTxをPDFに変換する。

たくさんある、PPTをPDFに変換したいと思った。

まぁ、PPT→PPTXでもインだけど、PDFにしちゃう方がポータビリティがいいんですよね。

どうせ、PPTXを編集することなんてないんだし。

PDFの方が、Evernoteに放り込んだり、検索可能にしたり、Explorer/Finderのプレビューでパパッと見られて色々便利なんだよね。

keynote を使う場合。

開いているファイルを、PDFに変換して保存する

var app = Application("Keynote")
var doc  = app.Document()
//doc.text = "test"
//app.documents.push(doc)
app.documents[0].save({
in : Path("/Users/takuya/Desktop/sample2.key")
})

console.log(app.documents[0].name())
app.documents.at(0).export
app.documents.at(0).export({
as : "PDF",
 to : Path("/Users/takuya/Desktop/sample2.pdf")
})

これで、pptx を keynotes 形式に変換したり、keynotes 形式をPDFに変換したりできる。

楽チンですが・・・MicrosoftのOfficeで変換したときと若干異なるんですよね。

PowerPoint だと動かない

同じように やったけど動かないんだ。

var app = Application("Microsoft PowerPoint")
var doc = app.presentations.at(0)

console.log(doc.name())

doc.save({
as : "PDF",
in : "/Users/takuya/Desktop/sample2.pdf"
})

AppleScript だと辛うじてうごく

set out to POSIX file "/Users/takuya/Desktop/test.pdf"
tell application "Microsoft PowerPoint"
save active presentation in out as save as PDF
end tell

ダイアログが出てくるのだが、動いてるとは思えない。

f:id:takuya_1st:20160129202811p:plain:w200

もう半年くらい、この原因とたかってて

ある日、ひらめいた。Sandbox 化が原因だったんじゃ?

とりあえずサンドボックス領域を調べてみた。

ファイルができてるではないか

f:id:takuya_1st:20160129202739p:plain:w400

ということで、AutomatorApplescriptPowerpointで変換したら、次のパスに作られる。

~/Library/Containers/com.microsoft.Powerpoint/Data.pdf

該当資料を探した。

http://answers.microsoft.com/en-us/mac/forum/macoffice2016-macexcel/applescript-save-as-pdf-fails/bccc7a27-0263-44be-9506-deb7d3de387e?auth=1

After studying the Document "App Sandbox in Depth" it seems just consequent for me what Microsoft did with Office 2016 and AppleScript. Regarding this document sandboxed apps can just write automatically (triggered by AppleScript) within the path ~/Library/Containers/com.microsoft.excel/. So doing something like this
tell application "Microsoft Excel"
    tell active sheet
        save in path to temporary items from user domain as PDF file format
    end tell
end tell
should work. Files can afterwards be found in ~/Library/Containers/com.microsoft.excel/Data/Library/Caches/TemporaryItems/

ほかにも

http://eyeballonly.com/blog/2014/02/20/macosx-sandbox/

http://piyocast.com/as/archives/category/applescriptobjc/nshomedirectory/

などで、散見された。

Sanbox 化されたアプリケーションへのAutomator・ScriptEditorについて

https://developer.apple.com/library/mac/qa/qa1888/_index.html

Sandboxで、アクセス可能なディレクトリにDesktopがない。アプリ側でパーミッションを要求する感じ。でも動いてないんだよなぁ

しかしながら「テキストエディット」のような、Apple謹製のAppは、Sandboxされているが、Desktopへファイル保存が可能である。

ということは、Microsoftのプログラム側にバグがある。マイクロソフトPowerPointのプログラムでSandboxを正しく扱えていないということしか考えられない。