サードパーティの有償Framework「PSPDFkit」をAppleScriptからコントロールする実験のAppleScriptです。
PSPDFkitについては以前から知っていました。サンプルもAppleよりきちんとしているので、いいんじゃないかと思っていました。
PSPDFの重要性を痛感したのは、AppleがmacOS 10.13の開発で大失敗して、α版以下のバグだらけのOSをリリースしたからです。
もはや、「公開デバッグを1年かけて行うので、最新版は使わないでね」という状態です。はい。10.13を積極的に使う意味など何もありません。
とくに、PDFKitまわりは問題だらけで、自分がMac App Storeで売っているソフトウェアも、macOS 10.13では起動してもまともに動きません(Betaで問題なく動くことを確認していたんですがー)。Developper Supportに質問を投げても返事すら来ません(本当)。
そんなわけで、PDF処理でAppleがOS内に作った機能が正しく維持される保証がなく、むしろ悪くなりそうな気配すらある昨今、PSPDFを使うのも悪くないと思えてきました。
問題は、
・ライセンス契約の問題 たんに「たまに動かす程度のScript」で使うのに合ったライセンス形態があるのかないのか
といったあたりでしょう。ライセンス価格表が掲載されているわけでもないので、いまひとつ不明です(ありがちー)。
→ PSPDFkitのsalesと話をしてみたら、ユーザー数と用途、OSプラットフォームなどに応じて、年ごとのビルドライセンス+実行ライセンスで契約するようです。ちなみに、試用ライセンスが切れるとスクリプトエディタ上で実行はできてしまうものの、実行直後にスクリプトエディタが終了させられます
何はともあれ、実際にPSPDFkit for macOSの試用版をダウンロードし、試用ライセンスキーを取得して(今度は真剣に)いろいろ試してみました。
ダウンロードしてきた試用版のPSPDFkit.frameworkを~/Library/Frameworksにインストールして、取得したPSPDFkitの試用版ライセンスを「current application’s PSPDFKit’s setLicenseKey:」のパラメータに書き、Control-Command-Rで「最前面で実行」(実際にはメインスレッド実行だが)を行うと動作します。
いろいろ検討してPSPDFkitは使いませんでした。macOS用だとPDFViewに該当する部品が提供されていないため、PDFView自体の代替にならないためです(そこにScripting Bridgeのバグが集中しているので)。
AppleScript名:PSPDFkitのじっけん(Script Editor) |
— Created 2018-08-29 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "PSPDFKit" –https://pspdfkit.com –This Script have to run in foreground property PSPDFKit : a reference to current application’s PSPDFKit property PSPDFDocument : a reference to current application’s PSPDFDocument current application’s PSPDFKit’s setLicenseKey:"XxXX_XXXXXxXxxXXXXxxXxxxXXXxxXXXXXxXXXxXXXX" set aPDFfile to POSIX path of (choose file) set aURL to current application’s |NSURL|’s fileURLWithPath:aPDFfile set aDoc to current application’s PSPDFDocument’s alloc()’s initWithURL:aURL set pCount to (aDoc’s pageCount()) as integer log pCount set aVf to (aDoc’s isValid()) as boolean log aVf set fList to aDoc’s features() set fName to (aDoc’s fileName()) as string set f0Name to aDoc’s fileNameForPageAtIndex:10 set f1Name to (aDoc’s title()) as string |
この「最前面で実行」(メインスレッドで実行)する機能がScript Debuggerには存在していないので、一部Scriptを書き換えて、Script Debugger上でも動くようにしてみました。今回はたまたま動きましたが、「スクリプトエディタ上で動作するのにScript Debugger上では動作しない」ことも往々にしてありうるので、ご注意を。
AppleScript名:PSPDFkitのじっけん(Script Debugger) |
— Created 2018-08-29 by Takaaki Naganoya — 2018 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "PSPDFKit" –https://pspdfkit.com –This Script have to run in foreground property PSPDFKit : a reference to current application’s PSPDFKit property PSPDFDocument : a reference to current application’s PSPDFDocument my performSelectorOnMainThread:"setLicence:" withObject:(missing value) waitUntilDone:true set aPDFfile to POSIX path of (choose file) set aURL to current application’s |NSURL|’s fileURLWithPath:aPDFfile set aDoc to current application’s PSPDFDocument’s alloc()’s initWithURL:aURL set pCount to (aDoc’s pageCount()) as integer log pCount set aVf to (aDoc’s isValid()) as boolean log aVf set fList to aDoc’s features() set fName to (aDoc’s fileName()) as string set f0Name to aDoc’s fileNameForPageAtIndex:10 set f1Name to (aDoc’s title()) as string on setLicence:(anObj) current application’s PSPDFKit’s setLicenseKey:"XxXX_XXXXXxXxxXXXXxxXxxxXXXxxXXXXXxXXXxXXXX" end setLicence: |