Archive for the 'NSPrintOperation' Category

2016/01/07 OSAScriptViewでAppleScriptをソース取得&コンパイルして書式付きでPDF出力

Cocoaの機能を用いて、指定のAppleScriptのソースを取得して、再度OSAScriptView上でコンパイル(構文確認)を行い、構文色分けを反映させたスタイルつきのPDFとして出力するAppleScriptです。

わかりにくいですが、AppleScriptの書類をPDF出力するAppleScriptです(正確に書けば書くほどわからなくなるのはなぜだろう)。デスクトップフォルダ上に元Scriptのファイル名でPDF出力します。

script1.png
▲出力対象のAppleScript書類

scriptpdf.png
▲上記書類をPDF出力したもの

PDF出力部分は、指定URLの内容を1枚モノのPDFに書き出すAppleScriptを書いた際に利用した記述そのままです。ページネーションは一切していないため、こういう用途ではページネーション指定をしてPDF出力したほうがよいかもしれません。

AppleScriptのパスだけ与えれば、あとはGUIアプリの機能は利用していないため、大量データの並列処理に適した構造になっています。

「なんでこんなもの作ったの?」と聞かれましたが、結局「これじゃない何か」を作ろうとして、その途中経過ができたものなので、本Scriptは本当に作りたいものの副産物です。

AppleScript名:OSAScriptViewでAppleScriptをソース取得&コンパイルして書式付きでPDF出力
– Created 2016-01-07 by Takaaki Naganoya
– 2016 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “OSAKit”
use framework “AppKit”
use framework “Quartz”

set targX to 1024 –PDF Width
set targY to 2048 –PDF Height

–Select & Read AppleScript Source (Only Editable AppleScripts are available)
set aScriptAlias to (choose file with prompt “Choose AppleScript to convert to PDF” of type {“com.apple.applescript.script-bundle”, “com.apple.applescript.script”})

set srcStr to getASsourceFor(aScriptAlias) of me
if srcStr = missing value or srcStr = “” then
  –Error
  
display dialog “Error in reading script source….” buttons {“OK”} default button 1 with icon 1
  
return
end if

–Making PDF Out Path from source script file name
set outName to getFileNameFromAlias(aScriptAlias) of me
set outFol to POSIX path of (path to desktop)
set outPath to outFol & outName
set pathString to current application’s NSString’s stringWithString:outPath
set newPath to pathString’s stringByDeletingPathExtension()
set pdfOutPath to newPath’s stringByAppendingPathExtension:“pdf”

–Compile AppleScript
set osaCon to current application’s OSAScriptController’s alloc()’s init()
set osaView to current application’s OSAScriptView’s alloc()’s initWithFrame:(current application’s NSMakeRect(0, 0, targX, targY))
osaCon’s setScriptView:osaView
osaView’s setString:srcStr
osaCon’s compileScript:(missing value) –Compile(構文確認)

–Make Print into PDF
set aPrintInfo to current application’s NSPrintInfo’s sharedPrintInfo()
set newPrintOp to current application’s NSPrintOperation’s PDFOperationWithView:(osaView) insideRect:(current application’s NSMakeRect(0, 0, targX, targY)) toPath:pdfOutPath printInfo:aPrintInfo

set runPrint to newPrintOp’s runOperation()
return (runPrint as boolean)

–指定AppleScriptファイルのソースコードを取得する(実行専用Scriptからは取得できない)
– Original Created 2014-02-23 Shane Stanley
on getASsourceFor(anAlias as {alias, string})
  set anHFSpath to anAlias as string
  
set aURL to current application’s |NSURL|’s fileURLWithPath:(POSIX path of anHFSpath)
  
set theScript to current application’s OSAScript’s alloc()’s initWithContentsOfURL:aURL |error|:(missing value)
  
return theScript’s source() as text
end getASsourceFor

–指定のAliasからファイル名を取得する
on getFileNameFromAlias(anAlias)
  set aPath to POSIX path of anAlias
  
set pathString to current application’s NSString’s stringWithString:aPath
  
set newPath to pathString’s lastPathComponent()
  
return newPath as string
end getFileNameFromAlias

★Click Here to Open This Script 

2012/12/31 AppleScriptObjCでViewを印刷

AppleScriptObjCで印刷を行うサンプルを、MacScripterの書き込みを元に組み立てて……そのままでは芸がないので「’s」でオブジェクト階層をつなぐ記法から「tell」文で階層をつなぐ記法に書き換えてみました。

AppleScriptObjC登場時から、「’s」でオブジェクト階層をつなぐ記法はいまひとつとっつきが悪く、読みにくさに拍車をかけていました。

この「’s」記法は、Objective-Cのプログラムとオブジェクト指定の並び順が同じため、Objective-Cのプログラムを参考にしてAppleScriptObjCのプログラムを書く場合には便利です。

set sharedPrintInfo to current application’s NSPrintInfo’s sharedPrintInfo()

という記述をtell文で展開すると、

tell current application
 tell class “NSPrintInfo”
  set mySharedPrintInfo to sharedPrintInfo()
 end tell
end tell

のようになります。class文を補う必要があるので、このあたり要注意でしょうか。

さらにすすめていくと、

thePrintOp’s runOperation

の箇所だけはtell文で展開できませんでした。

print1.png

WebViewを置いて、簡単なWebブラウザを作成。URL欄に入れたURLをWebViewで表示。

print2.png

printボタンを押すと印刷ダイアログを表示します。このダイアログ、いろいろとカスタマイズする方法があると楽しそう(応用範囲が広そう)です。

ただ、印刷前にViewを広げてあげないと印刷対象のViewが十分に印刷されなかったりと、いろいろケアしてあげないといけなさそうで…………

AppleScriptObjCファイル名:printingASOCAppDelegate.applescript

– printingASOCAppDelegate.applescript
– printingASOC

– Created by Takaaki Naganoya on 10/09/24.
– Copyright 2010 Takaaki Naganoya. All rights reserved.

– Original http://www.macscripter.net/viewtopic.php?id=37525

script printingASOCAppDelegate
  
  property parent : class “NSObject”
  
  property theView : missing value
  
  
  on applicationWillFinishLaunching_(aNotification)
    
  end applicationWillFinishLaunching_
  
  on applicationShouldTerminate_(sender)
    return current application’s NSTerminateNow
  end applicationShouldTerminate_
  
  
  –ボタンのクリックにBindしておいた
  
on thePrint_(sender)
    doPrinting()
  end thePrint_
  
  
  –指定のビューを印刷する
  
on doPrinting()
    
    tell current application
      tell class “NSPrintInfo”
        set mySharedPrintInfo to sharedPrintInfo()
      end tell
    end tell
    
    
    tell mySharedPrintInfo
      –上下左右のマージン設定
      
setLeftMargin_(20.0)
      
setRightMargin_(0.0)
      
setTopMargin_(20.0)
      
setBottomMargin_(10.0)
      
      –印刷方向設定
      
setOrientation_(0)
      
      –水平、垂直の各方向のページネーション(レイアウト?)設定
      
setHorizontalPagination_(1)
      
setVerticalPagination_(0)
      
      –上下左右のセンター設定
      
setVerticallyCentered_(0)
      
setHorizontallyCentered_(1)
      
    end tell
    
    
    tell current application
      tell class “NSPrintOperation”
        set thePrintOp to printOperationWithView_printInfo_(theView, mySharedPrintInfo)
      end tell
    end tell
    
    tell thePrintOp
      runOperation()
    end tell
  end doPrinting
  
  
end script

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