Adobe Acrobatは、一応AppleScript用語辞書がついてはいるものの、ほぼ「使えないアプリ」「役に立たない用語辞書」の名をほしいままにしてきました。AppleScript界における「がっかり遺産」のような存在です。
登場以来、一番期待されるPDF本文テキスト抽出の用途にまったく役に立たない(文字化けした謎テキストを出力)うえに、TOCやBookmarkへのアクセスもさっぱりです。
Classic MacOS時代にAdobe AcrobatのAppleScript用語辞書への深い失望があって、そこからフリーの「Skim PDF Viewer」の登場とか、のちにCocoaを直接呼べるようになって、十分なPDFへのアクセスが行えるようになりました。もはや、「もっといいもの」がいろいろ存在しているため、PDFを操作したいとか情報を抽出したいという需要は別のものによって満たされている状態です。
いまや、Adobe AcrobatのAppleScript用語辞書の存在感は「歴史上、そんなものがあったと語りつがれさえもしない」という「Air」のようなレベルです。事実、それに見出せる価値は何もありません。
そうした歴史認識と前提となる話がありつつも、それでも1つだけAdobe Acrobatには価値ある機能が存在します。本当に1つだけ。
それが、PDFの圧縮機能です。
最近は、macOS上のQuartzFilterのPDF圧縮もまったく機能しておらず、逆に呼び出すとファイルサイズが大きくなるとかいう笑えない冗談みたいな状態。PDFの圧縮ソリューションについてはAdobe Acrobatないしはactobat.adobe.comのWebアプリぐらいしか、手軽に使えるものが存在していない状態です。
とはいうものの、Adobe AcrobatのPDF圧縮機能は、AppleScript用語辞書に呼び出し用のコマンド用語が用意されてはいません。強引にGUIを操作するしかないようです。
Adobe AcrobatのAppleScript用語辞書の中にも「execute」コマンドが用意されており、任意のメニュー項目を操作できるような雰囲気が漂っていますが、いくら指定しても操作できません。
というわけで、とても嫌ではあるもののGUI Scripting経由で機能にアクセス。ちなみに、こういう時のために用意しておいた「dynamicMenuClicker」ライブラリは、Adobe Acrobat向けにはうまく動作しません。アプリケーション名、プロセス名、表示プロセス名などでAdobe Acrobatは不具合を持つ「特異点」であるため、Acrobatを操作する場合にのみ別の対処ルーチンを組み込んでおく必要があることでしょう。
AppleScript名:GUI Scripting経由でオープン中のPDFのファイルサイズを縮小.scpt |
tell application "Adobe Acrobat" tell front document set aCount to count every document if aCount = 0 then return end tell end tell activate application "Adobe Acrobat" tell application "System Events" tell process "Acrobat" –ファイル>その他の形式で保存>サイズが縮小されたPDF… click menu item 1 of menu 1 of menu item 9 of menu 1 of menu bar item 3 of menu bar 1 delay 0.5 –ダイアログ上のボタン「OK」をクリック tell window 1 click button "OK" end tell delay 0.5 –保存ダイアログ(名前を付けて保存) tell window 1 click button "保存" –Localized delay 0.5 set sList to every sheet if length of sList is not equal to 0 then tell sheet 1 click button "置き換え" –Localized end tell end if end tell end tell end tell |
下記Scriptは、動作しません。
AppleScript名:本来はこう書けば動くはずだったメニュー操作.scpt |
use dynC : script "dynamicClicker"
set appName to "AdobeAcrobat" –Application Name set aList to {"ファイル", "その他の形式で保存", "サイズが縮小されたPDF…"} –Localized Menu Titles set aRes to clickSpecifiedMenuElement(appName, aList) of dynC |