08/21 印刷可能なプリンタ一覧から選択してプリント実行 10.4〜10.7
印刷可能なプリンター一覧から選択してプリント実行するAppleScriptのMac OS X 10.7対応版です。
lpstatコマンドを呼び出して、その結果をparseしてプリンタ名を取り出す……という、あまり工夫もへったくれもない内容ではありますが、このlpstatコマンドが返す文字列が、OSのメジャーアップデートごとに微妙にフラフラと変わっているため、メジャーアップデートのたびに地道に調査して反映するという作業が必要になっています。
また、日本語以外のユーザー環境で利用する場合には、lpstatコマンドの返り値を調べて微調整する必要があります。Mac OS X 10.4の時には日本語環境でも英語メッセージが出ていたのですが、10.5以降は出力結果もローカライズされてしまって、本当にこれでいいのか疑問が残ります。
例によって、出力する紙のサイズを指定できないようになっています。
# 出力先のプリンタ名称取得ぐらいの機能は、標準で持っていてほしいところですが……
とりあえず、実際にMac OS X 10.7の稼働するMacBook Airで動作を確認しました。
| スクリプト名:印刷可能なプリンタ一覧から選択してプリント実行 10.4_10.7 |
| –要・Mac OS X 10.4以上 set pList to getPrintCues() of me set aPrinter to first item of (choose from list pList with prompt “出力先のプリンタを選択してください“) set aPrintSetting to {copies:1, starting page:1, ending page:1, target printer:aPrinter} –とりあえずSafariで印刷してみた。Safariである必要はない tell application “Safari” activate tell document 1 try print with properties aPrintSetting with print dialog –「with」を「without」にすると、ダイアログなしで印刷 on error display dialog “プリント中になんかのエラーが発生しました。たぶん、キャンセルされたんでしょう“ buttons {“OK”} default button 1 end try end tell end tell (* プロパティ: copies integer — プリントする書類の部数collating boolean — プリントの丁合をとるかどうか starting page integer — 書類からプリントする最初のページ ending page integer — 書類からプリントする最後のページ pages across integer — 物理的なページ上に横方向に並べる論理ページの数 pages down integer — 物理的なページ上に縦方向に並べる論理ページの数 requested print time date — デスクトッププリンタが書類をプリントするべき時間 error handling standard/summarized/detailed — エラーの処理方法 fax number text — 書類の送信先ファックス番号 target printer text — 出力先のプリントキューの名前 – 用紙サイズを指定できないのはどういうことなのか?(汗) 用紙サイズ指定できなかったら意味ないやんけ!*) –プリントキューの名称一覧を取得 –10.7用に書き換え on getPrintCues() set P to paragraphs of (do shell script “lpstat -p”) set pList to {} set osVer to (system attribute “sys2″) as number repeat with i in P set j to contents of i if osVer = 7 then –10.7 set aPName to trimStrings(j, “プリンタ“, ” は待機中です。“) of me else if osVer = 6 then –10.6 set aPName to trimStrings(j, “プリンター “, ” は待機中です。“) of me else if osVer = 5 then –10.5 set aPName to trimStrings(j, “プリンタ “, ” は待機中です。“) of me else if osVer = 4 then –10.4 set aPName to trimStrings(j, “printer “, ” is idle. enabled since “) of me end if if aPName is not equal to “” then set the end of pList to aPName end if end repeat return pList end getPrintCues –任意の文字列から指定開始子、指定終了子でトリミングした文字列を取り出す on trimStrings(aString, fromStr, endStr) set fromLen to length of fromStr set eLen to length of endStr set sPos to offset of fromStr in aString if sPos = 0 then return “” set body1 to text (sPos + fromLen) thru -1 of aString set ePos to offset of endStr in body1 if ePos = 0 then return “” set body2 to text 1 thru (ePos - 1) of body1 return body2 end trimStrings |







