AppleScript 標準スイートには、アプリケーションから印刷するコマンドがあり、特定のオプションを指定して、ダイアログ ボックスを表示せずに印刷できます。例えば:
tell application "Safari"
print document 1 with properties {copies:3} without print dialog
end tell
ただし、現在のバージョンの Safari にはバグがあり、これが本来の動作を妨げているようです。1を指定するwithout print dialog
と、印刷ジョブの処理の進行状況を表示するシートがウィンドウにポップアップ表示されますが、そうする代わりに、説明のない理髪店でハングします。
これを回避しようとして、 を指定するwith print dialog
と、すべてが想定どおりに機能することに気付きました。スクリプトは、ダイアログを表示した後、その行で実行を一時停止し、ユーザーがダイアログの印刷ボタンを押した後に続行します。これに対する最も洗練された回避策はkeystroke return
、ダイアログが表示された後に行うことですが、ダイアログが閉じられるまでその行でスクリプトが一時停止されていることを考えると、これは不可能だと思います。
はるかにエレガントではない回避策は次のとおりです。
on printCopiesOfCurrentPage(copies)
tell application "System Events"
tell application process "Safari"
keystroke "p" using command down
keystroke copies as text
keystroke return
delay 3
end tell
tell
end printCopiesOfCurrentPage
印刷ジョブが送信されるまで実行を遅らせる方法がないため、 で推測する必要がdelay 3
ありますが、これは非効率的であるか問題があります。
ここに他の可能性はありますか?キーストロークメソッドを使用した後に印刷ダイアログが消えるのを監視する方法、またはprint with dialog
呼び出された後にジョブを開始する方法はありますか?
1. 私がこれを初めて試したとき、実際には 1.5 ページ印刷された後、ひっくり返ってプリンター ジャムが発生しました。それ以来、再現できていないので、誰かがこのバグを確認してくれれば幸いです。