« [configCode]Macのモデル名を取得する | トップページ | [TTML]現時点でのまとめ(自分用) »

[Acrobat]テキスト注釈の作成者の氏名変更(文字化け対策入り)


【スクリプトエディタで開く】|

#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
#
#
#
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
#use framework "Quartz"
#use framework "PDFKit"
#use framework "QuartzCore"
#use framework "CoreGraphics"
use scripting additions
property refMe : a reference to current application
set appFileManager to refMe's NSFileManager's defaultManager()

set strBundleID to ("com.adobe.Acrobat.Pro") as text

##################################
#### 文書を開いているか?
##################################
tell application id "com.adobe.Acrobat.Pro"
activate
  tell active doc
    set numAllPage to do script ("this.numPages;")
    set numNowPage to do script ("this.pageNum;")
    try
      if numAllPage is "undefined" then
        error number -1708
      end if
    on error
display alert "エラー:文書が選択されていません" buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 10
return "エラー:文書が選択されていません"
    end try
  end tell
end tell
##################################
#### 注釈を選択しているか?
##################################
tell application id "com.adobe.Acrobat.Pro"
  ####ページ今のページ番号
  set numNowPage to do script ("this.pageNum;")
  tell page numNowPage
    try
      #### selectedAnnotsがエラーしたら選択していない
      set theSelectedAnnots to do script ("this.selectedAnnots;")
      if theSelectedAnnots is "undefined" then
        error number -1708
      end if
      set numLenge to do script ("this.selectedAnnots.length;")
    on error
display alert "エラー:注釈が選択されていません" buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 30
return "エラー:注釈が選択されていません"
    end try
  end tell
end tell
##########################################
#### ユーザー情報取得
##########################################
tell application id "com.adobe.Acrobat.Pro"
launch
activate
  set objActivDoc to active doc
  try
    #### アクロバットの設定から氏名を取得する場合
    set strUserLastNamet to do script ("identity.lastName;") as text
    set strUserFirstNamet to do script ("identity.firstName;") as text
    #### 姓名を繋げて
    set strIdentityName to (strUserLastNamet & strUserFirstNamet) as text
    if strIdentityName is "" then
      set strIdentityName to "" as text
log "環境設定>>ユーザー情報が登録されていません"
    else if strIdentityName starts with "?" then
      set strIdentityName to "" as text
log "環境設定>>ユーザー情報が文字バケしています"
    end if
  on error
    set strIdentityName to "" as text
log "環境設定>>ユーザー情報が登録されていません"
  end try
end tell
##########################################
####ダイアログ
##########################################
set ocidAppPathURL to doGetBundleID2AppURL(strBundleID)
####ダイアログに指定アプリのアイコンを表示する
set strIconPath to ""
###アイコン名をPLISTから取得
set ocidPlistPathURL to ocidAppPathURL's URLByAppendingPathComponent:("Contents/Info.plist") isDirectory:false
set ocidPlistDict to refMe's NSMutableDictionary's alloc()'s initWithContentsOfURL:(ocidPlistPathURL)
set strIconFileName to (ocidPlistDict's valueForKey:("CFBundleIconFile")) as text
###ICONのURLにして
set strPath to ("Contents/Resources/" & strIconFileName) as text
set ocidIconFilePathURL to ocidAppPathURL's URLByAppendingPathComponent:(strPath) isDirectory:false
###拡張子の有無チェック
set strExtensionName to (ocidIconFilePathURL's pathExtension()) as text
if strExtensionName is "" then
  set ocidIconFilePathURL to ocidIconFilePathURL's URLByAppendingPathExtension:"icns"
end if
##-->これがアイコンパス
log ocidIconFilePathURL's absoluteString() as text
###ICONファイルが実際にあるか?チェック
set boolExists to appFileManager's fileExistsAtPath:(ocidIconFilePathURL's |path|)
###ICONがみつかない時用にデフォルトを用意する
if boolExists is false then
  set aliasIconPath to POSIX file "/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/AlertNoteIcon.icns"
else
  set aliasIconPath to ocidIconFilePathURL's absoluteURL() as alias
  set strIconPath to ocidIconFilePathURL's |path|() as text
end if
if strIconPath is (missing value) then
  set strIconPath to ""
end if

##########デフォルトアンサー
if strIdentityName is "" then
  ####OSのログイン名
  tell application "Finder"
    set strLongUserName to long user name of (system info) as text
  end tell
  set strDefaultAnswer to strLongUserName as text
log "環境設定>>ユーザー情報が登録されていません"
else
  ###Acrobatのユーザー情報設定
  set strDefaultAnswer to strIdentityName as text
end if
##############################
#####ダイアログを前面に出す
##############################
tell current application
  set strName to name as text
end tell
####スクリプトメニューから実行したら
if strName is "osascript" then
  tell application "Finder"
activate
  end tell
else
  tell current application
activate
  end tell
end if
try
  set recordResponse to (display dialog "ここに入力した名称に書き換えます" with title "注釈の名称変更します" default answer strDefaultAnswer buttons {"OK", "キャンセル"} default button "OK" cancel button "キャンセル" with icon aliasIconPath giving up after 30 without hidden answer)
on error
log "エラーしました"
return "エラーしました"
  error number -128
end try
if true is equal to (gave up of recordResponse) then
return "時間切れですやりなおしてください"
  error number -128
end if
if "OK" is equal to (button returned of recordResponse) then
  ####戻りの値を設定します
  set strResponse to (text returned of recordResponse) as text
else
log "エラーしました"
return "エラーしました"
  error number -128
end if


################################
### ページ数
################################

tell application "Adobe Acrobat"
activate
  tell active doc
    ####全面のドキュメントの
    ### ページ数
    set numAllPage to do script ("this.numPages;")
    ### 今のページ番号
    set numNowPage to do script ("this.pageNum;")
  end tell
end tell

################################
### ロック解除
################################
set numAnnoCnt to 0
repeat numLenge times
  tell application id "com.adobe.Acrobat.Pro"
    ########まずはロックを解除する
    try
do script ("this.selectedAnnots[" & numAnnoCnt & "].setProps({lock:'false'});")
do script ("this.selectedAnnots[" & numAnnoCnt & "].setProps({readOnly:'false'});")
    on error
do script ("this.selectedAnnots[" & numAnnoCnt & "].lock = false;")
do script ("this.selectedAnnots[" & numAnnoCnt & "].readOnly = false;")
    end try
    set numAnnoCnt to numAnnoCnt + 1
  end tell
end repeat
################################
### 注釈数のカウント
################################
set listAnnoID to {} as list
tell application id "com.adobe.Acrobat.Pro"
  tell page numNowPage
    try
      #####注釈カウント
      set theSelectedAnnots to do script ("this.selectedAnnots;")
      set numLenge to do script ("this.selectedAnnots.length;")
      
do script ("var objAllAnnots = this.selectedAnnots;")
do script ("var objAllAnnotsLength = this.selectedAnnots.length;")
      
    on error
display alert "エラー:注釈が選択されていません" buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 10
return
    end try
  end tell
end tell
################################
### 注釈の内容をセット
################################
set numAnnoCnt to 0
tell application id "com.adobe.Acrobat.Pro"
  repeat numLenge times
    ####注釈の数だけ繰り返し
do script ("objAllAnnots[" & numAnnoCnt & "].setProps({ author:\"" & strResponse & "\"});")
    set numAnnoCnt to numAnnoCnt + 1
  end repeat
end tell


#display notification "処理終了" with title "処理が終了" subtitle "処理が終了しました" sound name "Sonumi"
#log ">>>>>>>>>>>>処理終了<<<<<<<<<<<<<<<"
return ">>>>>>>>>>>>処理終了<<<<<<<<<<<<<<<"



###################################
### バンドルIDからアプリケーションURL
###################################
to doGetBundleID2AppURL(argBundleID)
  set strBundleID to argBundleID as text
  set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
  ##バンドルIDからアプリケーションのURLを取得
  set ocidAppBundle to (refMe's NSBundle's bundleWithIdentifier:(argBundleID))
  if ocidAppBundle ≠ (missing value) then
    set ocidAppPathURL to ocidAppBundle's bundleURL()
  else if ocidAppBundle = (missing value) then
    set ocidAppPathURL to (appSharedWorkspace's URLForApplicationWithBundleIdentifier:(argBundleID))
  end if
  ##予備(アプリケーションのURL)
  if ocidAppPathURL = (missing value) then
    tell application "Finder"
      try
        set aliasAppApth to (application file id strBundleID) as alias
        set strAppPath to (POSIX path of aliasAppApth) as text
        set strAppPathStr to refMe's NSString's stringWithString:(strAppPath)
        set strAppPath to strAppPathStr's stringByStandardizingPath()
        set ocidAppPathURL to refMe's NSURL's alloc()'s initFileURLWithPath:(strAppPath) isDirectory:true
      on error
return "アプリケーションが見つかりませんでした"
      end try
    end tell
  end if
return ocidAppPathURL
end doGetBundleID2AppURL


|

« [configCode]Macのモデル名を取得する | トップページ | [TTML]現時点でのまとめ(自分用) »

Acrobat Annotation」カテゴリの記事