Archive for the 'Pages 4' Category

2013/11/18 印刷可能なプリンタ一覧から選択してプリント実行 10.9

印刷可能なプリンター一覧から選択してプリントを実行するAppleScriptの改修版です。

昨日掲載したAppleScriptでは、PDF出力用のバーチャルプリンター(CUPS-PDF)にダイアログなしで印刷出力してPDFを作成するというワークフローがOS X 10.9上で確認できませんでした(ダイアログを表示させると出力できていました)。

また、接続されていても「一時停止中(省エネモード)」のレーザープリンターを指定できなかったため、若干処理内容を見直してみました。身の回りに動作確認が可能なOS X 10.9以外の環境が少なくなっているため、OS X 10.9上でのみ動作確認してあります。

まず、バーチャルプリンターとしてCUPS-PDFではいまひとつの様子なので、同様にオープンソース&フリーで配布されている「PDFwriter for Mac v1.2.1」をOS X 10.9にインストール。

print1.png

プリントキューの一覧を求めるのに「lpstat -p」ではなく「lpstat -v」を実行するようにしました。これでスリープ中(一時停止中)のレーザープリンターも指定できます。

テストで、印刷を実行するアプリケーションにSafariを指定していましたが、いまひとつ「そんな処理はなかなかしないだろー」感が強いので、Pages(v4.3)をコントロールして書類をPDFに出力させるようにしてみました。

print3.png
▲Pages v4.3上でPagesの書類をオープンした状態

print2.png
▲PDF出力したものをPDF Viewer(Skim)でオープンしたところ

print4.png
▲プリント(PDF)出力されたファイル

なお、PDFWriterを指定してPDF出力させると、/private/var/spool/pdfwriter/(ユーザー名) のフォルダ内にファイルが生成されることを確認しました。

スクリプト名:印刷可能なプリンタ一覧から選択してプリント実行 10.9
set pList to getPrintCues()
set aPrinter to first item of (choose from list pList with prompt “出力先のプリンタを選択してください”)

set aPrintSetting to {copies:1, starting page:1, ending page:9999, target printer:aPrinter}

tell application “Pages”
  activate
  
tell document 1
    try
      print with properties aPrintSetting without print dialog –ダイアログなしで印刷
    on error
      display dialog “プリント中になんかのエラーが発生しました。たぶん、キャンセルされたんでしょう” buttons {“OK”} default button 1
    end try
  end tell
end tell

(*
–とりあえずSafariで印刷してみた。Safariである必要はない
tell application “Safari”
  activate
  tell document 1
    try
      print with properties aPrintSetting without print dialog –ダイアログなしで印刷
    on error
      display dialog “プリント中になんかのエラーが発生しました。たぶん、キャンセルされたんでしょう” buttons {”OK”} default button 1
    end try
  end tell
end tell
*)

–プリントキューの名称一覧を取得(10.9用)
on getPrintCues()
  set aRes to do shell script “lpstat -v”
  
set aList to paragraphs of aRes
  
  
set bList to {}
  
  
repeat with i in aList
    set j to contents of i
    
set jj to trimStrings(j, “device for “, “:”) of me
    
set the end of bList to jj
  end repeat
  
  
return bList
  
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

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/06/06 Pagesで表示中のページ上の要素をすべて選択する

Script Menuに入れておくタイプのスクリプトです。Pagesで現在表示中の書類の表示中のページ上のページアイテムを選択状態にします。Pagesでドキュメントを作っていて、複数のオブジェクトを選択するのに、マウスでエリアを選択すればその矩形内のオブジェクトがすべて選択される…………という風にはなっておらず、[SHIFT]キーを押しながら、対象のオブジェクトをクリックしていくという地味で地道で不毛な操作が必要になります。実にバカバカしいことこの上ない! そこで、これを一気に解決しようと思い、ささっとAppleScriptを書いてみた次第。

しかしながら、Pagesではtext boxとかlineとかgraphicとかimageとかtableといったページアイテムに対して汎用的にアクセスするオブジェクトが定義されていないため、仕方なく特定ページ上のすべてのオブジェクトタイプに対してselect命令を実行しています。汎用オブジェクトが定義されていれば、もう少しスマートに処理を記述できるのですが……。

スクリプト名:Pagesで表示中のページ上の要素をすべて選択する
tell applicationPages
  tell window 1
    set two up to false
    
set vPageList to visible pages
  end tell
  
  
set aPage to first item of vPageList
  
tell aPage to set aP to page number
  
  
tell document 1
    tell page aP
      tell every text box to select
      
tell every table to select
      
tell every shape to select
      
tell every line to select
      
tell every image to select
      
tell every graphic to select
      
tell every chart to select
    end tell
  end tell
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2008/05/29 Pagesの最前面のドキュメントを閉じてラベルを付ける

Pages(バージョン3)で複数のドキュメントをオープンしている状態で、最前面のドキュメントをクローズして書類ファイルにFinderでラベルを設定するAppleScriptです。いろいろと書類を作って取捨選択する際にささっと書いて使ったものです。

Pagesでは、最前面の書類がdocument 1としてアクセスできるので(Windowと等価)、document 1に対してアクセスします。アプリケーションによっては、これとは異なる場合もあり(テキストエディタなど)、未知のアプリケーションのスクリプティングを行う場合には、そのような基本的な動作から確認すべきです。

スクリプト名:Pagesの最前面のドキュメントを閉じてラベルを付ける
tell applicationPages
  tell document 1
    set aPath to path
    
close
  end tell
end tell

set macPath to POSIX file aPath

tell applicationFinder
  set label index of macPath to 2
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に