PDFKit

PDFからテキスト抽出(すこし治した)


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003(*
004com.cocolog-nifty.quicktimer.icefloe
005PDFのテキストコンテンツを
006PDFページ毎にテキストファイルとRTFファイルに書き出します
007RTFファイルでは簡易にフォントとサイズの確認が出来ます
008*)
009----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
010use AppleScript version "2.8"
011use framework "Foundation"
012use framework "AppKit"
013use framework "PDFKit"
014use scripting additions
015
016property refMe : a reference to current application
017
018########################
019#ダイアログ 入力
020set strName to (name of current application) as text
021if strName is "osascript" then
022  tell application "Finder" to activate
023else
024  tell current application to activate
025end if
026# デフォルトロケーション
027set appFileManager to refMe's NSFileManager's defaultManager()
028set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
029set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
030set aliasDesktopDirPath to (ocidDesktopDirPathURL's absoluteURL()) as alias
031set listUTI to {"com.adobe.pdf"}
032set strMes to ("PDFファイルを選んでください") as text
033set strPrompt to ("PDFファイルを選んでください") as text
034try
035  #ファイル選択時
036  set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDesktopDirPath) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
037on error
038  log "エラーしました"
039  return "エラーしました"
040end try
041########################
042#入力ファイルパス
043set strFilePath to (POSIX path of aliasFilePath) as text
044set ocidFilePathStr to refMe's NSString's stringWithString:(strFilePath)
045set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
046set ocidFilePathURL to refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:(false)
047
048########################
049#ダイアログ 出力先フォルダ
050(*  ファイル名から自動生成に変更
051set strName to (name of current application) as text
052if strName is "osascript" then
053  tell application "Finder" to activate
054else
055  tell current application to activate
056end if
057# デフォルトロケーション
058#選択したPDFファイルと同じディレクトリ
059set ocidContainerDirPathURL to ocidFilePathURL's URLByDeletingLastPathComponent()
060set aliasContainerDirPath to (ocidContainerDirPathURL's absoluteURL()) as alias
061#
062set strMes to ("保存先フォルダを選んでください\nページ数が多い場合はフォルダ作成した方がいいです") as text
063set strPrompt to ("保存先フォルダを選んでください\nページ数が多い場合はフォルダ作成した方がいいです") as text
064try
065  set aliasSaveDirPath to (choose folder strMes with prompt strPrompt default location aliasContainerDirPath with invisibles and showing package contents without multiple selections allowed) as alias
066on error
067  log "エラーしました"
068  return "エラーしました"
069end try
070*)
071#出力先フォルダパス
072set ocidBaseFilePathURL to ocidFilePathURL's URLByDeletingPathExtension()
073set strSaveDirName to (ocidFilePathURL's lastPathComponent())'s mutableCopy()
074(strSaveDirName's appendString:("-テキスト抽出"))
075#set strBaseFileName to (ocidFilePathURL's lastPathComponent()) as text
076#set strSaveDirName to (strBaseFileName & "-テキスト抽出")
077set ocidContainerDirPathURL to ocidFilePathURL's URLByDeletingLastPathComponent()
078set ocidSaveDirPathURL to ocidContainerDirPathURL's URLByAppendingPathComponent:(strSaveDirName) isDirectory:(true)
079#フォルダ作成
080set appFileManager to refMe's NSFileManager's defaultManager()
081set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
082ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
083set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error| :(reference)
084
085########################
086#NSDATA
087set ocidOption to (refMe's NSDataReadingMappedIfSafe)
088set listReadData to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidFilePathURL) options:(ocidOption) |error| :(reference)
089set ocidReadData to (item 1 of listReadData)
090
091########################
092#PDFDocument
093set ocidActiveDoc to refMe's PDFDocument's alloc()'s initWithData:(ocidReadData)
094#総ページ数
095set numCntPage to ocidActiveDoc's pageCount()
096#全ページテキスト
097set ocidOutPutAllString to refMe's NSMutableString's alloc()'s initWithCapacity:(0)
098#全ページ用のRTF
099set ocidOutPutAttrAllString to refMe's NSMutableAttributedString's alloc()'s initWithString:("")
100#RTF用の改行
101set ocidLineCode to refMe's NSMutableAttributedString's alloc()'s initWithString:("\n-----------\n")
102#ページ数分繰り返し
103repeat with itemIntNo from 0 to (numCntPage - 1) by 1
104  #ページを取り出して
105  set ocidActivePage to (ocidActiveDoc's pageAtIndex:(itemIntNo))
106  #ページ用テキスト
107  set ocidPageOutputString to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
108  ##################
109  #テキストを抽出
110  set ocidPageText to ocidActivePage's |string|()
111  #ページにテキスト要素が無い場合
112  if ocidPageText = (missing value) then
113    set strSetValue to ((itemIntNo + 1) & "ページ目にはテキスト情報無") as text
114    set ocidPageText to (refMe's NSString's stringWithString:(strSetValue))
115  end if
116  #全ページ用テキスト
117  (ocidPageOutputString's appendString:(ocidPageText))
118  (ocidOutPutAllString's appendString:("■ページ : " & (itemIntNo + 1) & "\n"))
119  (ocidOutPutAllString's appendString:(ocidPageText))
120  (ocidOutPutAllString's appendString:("\n---------------\n"))
121  #保存するファイル名
122  set strSaveFileNameText to ((itemIntNo + 1) & ".txt") as text
123  #保存先パス
124  set ocidSaveFilePathURLText to (ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveFileNameText) isDirectory:(false))
125  #保存
126  set listDone to (ocidPageOutputString's writeToURL:(ocidSaveFilePathURLText) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error| :(reference))
127  if (item 1 of listDone) is true then
128    log (itemIntNo + 1) & "ページ目:正常終了" as text
129  else if (item 1 of listDone) is false then
130    log (item 2 of listDone)'s localizedDescription() as text
131    return (itemIntNo + 1) & "ページ目:保存に失敗しました" as text
132  end if
133  ##################
134  #アトリビュートテキストを抽出して
135  set ocidPageAttarText to ocidActivePage's attributedString()
136  if ocidPageAttarText = (missing value) then
137    set strSetValue to ((itemIntNo + 1) & "ページ目にはテキスト情報無") as text
138    set ocidPageAttarText to (refMe's NSMutableAttributedString's alloc()'s initWithString:(strSetValue))
139  end if
140  #RTFデータに変換して
141  set ocidLength to ocidPageAttarText's |length|()
142  set ocidAttarTextRange to refMe's NSMakeRange(0, ocidLength)
143  set ocidAttarData to (ocidPageAttarText's RTFFromRange:(ocidAttarTextRange) documentAttributes:(missing value))
144  #全ページ用データ
145  set ocidNewLineCode to (refMe's NSMutableAttributedString's alloc()'s initWithString:("■ページ : " & (itemIntNo + 1) & "\n"))
146  (ocidOutPutAttrAllString's appendAttributedString:(ocidNewLineCode))
147  (ocidOutPutAttrAllString's appendAttributedString:(ocidPageAttarText))
148  (ocidOutPutAttrAllString's appendAttributedString:(ocidLineCode))
149  
150  #保存する
151  set strSaveFileNameRtf to ((itemIntNo + 1) & ".rtf") as text
152  set ocidSaveFilePathURLRtf to (ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveFileNameRtf) isDirectory:(false))
153  set ocidOption to (refMe's NSDataWritingAtomic)
154  set listDone to (ocidAttarData's writeToURL:(ocidSaveFilePathURLRtf) options:(ocidOption) |error| :(reference))
155  if (item 1 of listDone) is true then
156    log (itemIntNo + 1) & "ページ目:正常終了" as text
157  else if (item 1 of listDone) is false then
158    log (item 2 of listDone)'s localizedDescription() as text
159    return (itemIntNo + 1) & "ページ目:保存に失敗しました" as text
160  end if
161  
162end repeat
163
164#################
165#テキスト
166#保存するファイル名
167set strSaveFileNameText to ("_All.txt") as text
168#保存先パス
169set ocidSaveFilePathURLText to (ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveFileNameText) isDirectory:(false))
170#保存
171set listDone to (ocidOutPutAllString's writeToURL:(ocidSaveFilePathURLText) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error| :(reference))
172if (item 1 of listDone) is false then
173  log (item 2 of listDone)'s localizedDescription() as text
174  return "エラー:保存に失敗しました" as text
175end if
176
177#################
178#RTF
179#RTFデータに変換して
180set ocidLength to ocidOutPutAttrAllString's |length|()
181set ocidAttarTextRange to refMe's NSMakeRange(0, ocidLength)
182set ocidAttarData to (ocidOutPutAttrAllString's RTFFromRange:(ocidAttarTextRange) documentAttributes:(missing value))
183#RTF保存する
184set strSaveFileNameRtf to ("_All.rtf") as text
185set ocidSaveFilePathURLRtf to (ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveFileNameRtf) isDirectory:(false))
186set ocidOption to (refMe's NSDataWritingAtomic)
187set listDone to (ocidAttarData's writeToURL:(ocidSaveFilePathURLRtf) options:(ocidOption) |error| :(reference))
188if (item 1 of listDone) is true then
189  log (itemIntNo + 1) & "ページ目:正常終了" as text
190else if (item 1 of listDone) is false then
191  log (item 2 of listDone)'s localizedDescription() as text
192  return (itemIntNo + 1) & "ページ目:保存に失敗しました" as text
193end if
194#保存先を開く
195set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
196set boolDone to appSharedWorkspace's openURL:(ocidSaveDirPathURL)
197
198return "終了"
AppleScriptで生成しました

|

[PDFKit]PDFのテキストをファイルに書き出す(テキスト抽出) 修正


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003(*
004com.cocolog-nifty.quicktimer.icefloe
005PDFのテキストコンテンツを
006PDFページ毎にテキストファイルとRTFファイルに書き出します
007RTFファイルでは簡易にフォントとサイズの確認が出来ます
008*)
009----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
010use AppleScript version "2.8"
011use framework "Foundation"
012use framework "AppKit"
013use framework "PDFKit"
014use scripting additions
015
016property refMe : a reference to current application
017
018########################
019#ダイアログ 入力
020set strName to (name of current application) as text
021if strName is "osascript" then
022  tell application "Finder" to activate
023else
024  tell current application to activate
025end if
026# デフォルトロケーション
027set appFileManager to refMe's NSFileManager's defaultManager()
028set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
029set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
030set aliasDesktopDirPath to (ocidDesktopDirPathURL's absoluteURL()) as alias
031set listUTI to {"com.adobe.pdf"}
032set strMes to ("PDFファイルを選んでください") as text
033set strPrompt to ("PDFファイルを選んでください") as text
034try
035  #ファイル選択時
036  set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDesktopDirPath) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
037on error
038  log "エラーしました"
039  return "エラーしました"
040end try
041########################
042#入力ファイルパス
043set strFilePath to (POSIX path of aliasFilePath) as text
044set ocidFilePathStr to refMe's NSString's stringWithString:(strFilePath)
045set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
046set ocidFilePathURL to refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:(false)
047
048########################
049#ダイアログ 出力先フォルダ
050(*  ファイル名から自動生成に変更
051set strName to (name of current application) as text
052if strName is "osascript" then
053  tell application "Finder" to activate
054else
055  tell current application to activate
056end if
057# デフォルトロケーション
058#選択したPDFファイルと同じディレクトリ
059set ocidContainerDirPathURL to ocidFilePathURL's URLByDeletingLastPathComponent()
060set aliasContainerDirPath to (ocidContainerDirPathURL's absoluteURL()) as alias
061#
062set strMes to ("保存先フォルダを選んでください\nページ数が多い場合はフォルダ作成した方がいいです") as text
063set strPrompt to ("保存先フォルダを選んでください\nページ数が多い場合はフォルダ作成した方がいいです") as text
064try
065  set aliasSaveDirPath to (choose folder strMes with prompt strPrompt default location aliasContainerDirPath with invisibles and showing package contents without multiple selections allowed) as alias
066on error
067  log "エラーしました"
068  return "エラーしました"
069end try
070*)
071#出力先フォルダパス
072set ocidBaseFilePathURL to ocidFilePathURL's URLByDeletingPathExtension()
073set strSaveDirName to (ocidFilePathURL's lastPathComponent())'s mutableCopy()
074(strSaveDirName's appendString:("-テキスト抽出"))
075#set strBaseFileName to (ocidFilePathURL's lastPathComponent()) as text
076#set strSaveDirName to (strBaseFileName & "-テキスト抽出")
077set ocidContainerDirPathURL to ocidFilePathURL's URLByDeletingLastPathComponent()
078set ocidSaveDirPathURL to ocidContainerDirPathURL's URLByAppendingPathComponent:(strSaveDirName) isDirectory:(true)
079#フォルダ作成
080set appFileManager to refMe's NSFileManager's defaultManager()
081set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
082ocidAttrDict's setValue:(448) forKey:(refMe's NSFilePosixPermissions)
083set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error| :(reference)
084
085########################
086#NSDATA
087set ocidOption to (refMe's NSDataReadingMappedIfSafe)
088set listReadData to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidFilePathURL) options:(ocidOption) |error| :(reference)
089set ocidReadData to (item 1 of listReadData)
090
091########################
092#PDFDocument
093set ocidActiveDoc to refMe's PDFDocument's alloc()'s initWithData:(ocidReadData)
094#総ページ数
095set numCntPage to ocidActiveDoc's pageCount()
096#ページ数分繰り返し
097repeat with itemIntNo from 0 to (numCntPage - 1) by 1
098  #ページを取り出して
099  set ocidActivePage to (ocidActiveDoc's pageAtIndex:(itemIntNo))
100  #ページ用テキスト
101  set ocidPageOutputString to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
102  ##################
103  #テキストを抽出
104  set ocidPageText to ocidActivePage's |string|()
105  #ページにテキスト要素が無い場合
106  if ocidPageText = (missing value) then
107    set strSetValue to ((itemIntNo + 1) & "ページ目にはテキスト情報無") as text
108    set ocidPageText to (refMe's NSString's stringWithString:(strSetValue))
109  end if
110  (ocidPageOutputString's appendString:(ocidPageText))
111  #保存するファイル名
112  set strSaveFileNameText to ((itemIntNo + 1) & ".txt") as text
113  #保存先パス
114  set ocidSaveFilePathURLText to (ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveFileNameText) isDirectory:(false))
115  #保存
116  set listDone to (ocidPageOutputString's writeToURL:(ocidSaveFilePathURLText) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error| :(reference))
117  if (item 1 of listDone) is true then
118    log (itemIntNo + 1) & "ページ目:正常終了" as text
119  else if (item 1 of listDone) is false then
120    log (item 2 of listDone)'s localizedDescription() as text
121    return (itemIntNo + 1) & "ページ目:保存に失敗しました" as text
122  end if
123  ##################
124  #アトリビュートテキストを抽出して
125  set ocidPageAttarText to ocidActivePage's attributedString()
126  if ocidPageAttarText = (missing value) then
127    set strSetValue to ((itemIntNo + 1) & "ページ目にはテキスト情報無") as text
128    set ocidPageAttarText to (refMe's NSMutableAttributedString's alloc()'s initWithString:(strSetValue))
129  end if
130  #RTFデータに変換して
131  set ocidAttarTextRange to refMe's NSMakeRange(0, ocidPageAttarText's |length|())
132  set ocidAttarData to (ocidPageAttarText's RTFFromRange:(ocidAttarTextRange) documentAttributes:(missing value))
133  #保存する
134  set strSaveFileNameRtf to ((itemIntNo + 1) & ".rtf") as text
135  set ocidSaveFilePathURLRtf to (ocidSaveDirPathURL's URLByAppendingPathComponent:(strSaveFileNameRtf) isDirectory:(false))
136  set ocidOption to (refMe's NSDataWritingAtomic)
137  set listDone to (ocidAttarData's writeToURL:(ocidSaveFilePathURLRtf) options:(ocidOption) |error| :(reference))
138  if (item 1 of listDone) is true then
139    log (itemIntNo + 1) & "ページ目:正常終了" as text
140  else if (item 1 of listDone) is false then
141    log (item 2 of listDone)'s localizedDescription() as text
142    return (itemIntNo + 1) & "ページ目:保存に失敗しました" as text
143  end if
144  
145end repeat
146
147
148return "終了"
AppleScriptで生成しました

|

PDFの各ページ 回転 と 各種BOXサイズをTSVタブ区切りテキストに出力する(少し修正)



ダウンロード - chkpdfpage.zip




AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#
004#PDFのページサイズの設定値と回転の値を
005#全ページ取得してテキスト(タブ区切り)で出力します
006#必要に迫られて作っているので制御甘めなので(仮)
007#
008# com.cocolog-nifty.quicktimer.icefloe
009----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
010use AppleScript version "2.6"
011use framework "Foundation"
012use framework "AppKit"
013use scripting additions
014
015property refMe : a reference to current application
016
017#######################################
018#ダイアログ
019tell current application
020  set strName to name as text
021end tell
022if strName is "osascript" then
023  tell application "Finder"
024    activate
025  end tell
026else
027  tell current application
028    activate
029  end tell
030end if
031#######################################
032#ファイル選択ダイアログ
033set appFileManager to refMe's NSFileManager's defaultManager()
034set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
035set ocidDocumentDirPathURL to ocidURLsArray's firstObject()
036set aliasDefaultLocation to (ocidDocumentDirPathURL's absoluteURL()) as alias
037tell application "Finder"
038end tell
039set listChooseFileUTI to {"com.adobe.pdf"}
040set strPromptText to "PDFファイルを選んでください" as text
041set listAliasFilePath to (choose file with prompt strPromptText default location (aliasDefaultLocation) of type listChooseFileUTI with invisibles, multiple selections allowed and showing package contents) as list
042
043#######################################
044#出力用のテキスト
045set ocidOutPutString to refMe's NSMutableString's alloc()'s initWithCapacity:(0)
046
047#######################################
048#選んだファイルの数だけ繰り返す
049repeat with aliasFilePath in listAliasFilePath
050  #入力パス
051  set strFilePath to (POSIX path of aliasFilePath) as text
052  set ocidFilePathStr to (refMe's NSString's stringWithString:(strFilePath))
053  set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
054  set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:(false))
055  set ocidFileName to ocidFilePathURL's lastPathComponent()
056  set strSetValue to ("ファイル名\t" & (ocidFileName as text)) as text
057  (ocidOutPutString's appendString:(strSetValue))
058  (ocidOutPutString's appendString:("\n"))
059  #NSDATA
060  #エラー制御したいのでNSDataで読み込んでいます
061  set ocidOption to (refMe's NSDataReadingMappedIfSafe)
062  set listResponse to (refMe's NSData's alloc()'s initWithContentsOfFile:(ocidFilePathURL) options:(ocidOption) |error| :(reference))
063  if (item 2 of listResponse) = (missing value) then
064    log "正常処理"
065    set ocidReadData to (item 1 of listResponse)
066  else if (item 2 of listResponse) ≠ (missing value) then
067    log (item 2 of listResponse)'s code() as text
068    log (item 2 of listResponse)'s localizedDescription() as text
069    return "エラーしました"
070  end if
071  #PDFDocument
072  set ocidActivDoc to (refMe's PDFDocument's alloc()'s initWithData:(ocidReadData))
073  #ドキュメント情報
074  set ocidDocAttrDict to ocidActivDoc's documentAttributes()
075  set ocidKeyArray to ocidDocAttrDict's allKeys()
076  repeat with itemKey in ocidKeyArray
077    set ocidValue to (ocidDocAttrDict's valueForKey:(itemKey))
078    if (ocidValue's className() as text) contains "Date" then
079      set strSetValue to ((itemKey as text) & "\t" & (ocidValue as date)) as text
080      (ocidOutPutString's appendString:(strSetValue))
081      (ocidOutPutString's appendString:("\n"))
082    else
083      set strSetValue to ((itemKey as text) & "\t" & (ocidValue as text)) as text
084      (ocidOutPutString's appendString:(strSetValue))
085      (ocidOutPutString's appendString:("\n"))
086    end if
087  end repeat
088  
089  
090  #######
091  #1ページ目の値だけ先に取得しておく
092  set ocidActivPageInt to (ocidActivDoc's pageAtIndex:(0))
093  #ページの回転を取得
094  set numRotationInt to ocidActivPageInt's |rotation|()
095  #ページBOXの値を取得
096  set listMedeiaBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxMediaBox))
097  set listBleedBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxBleedBox))
098  set listTrimBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxTrimBox))
099  set listCropBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxCropBox))
100  #PTサイズテキスト
101  set strMedeiaBoxPt to doNestListToCSV(listMedeiaBoxPt)
102  set strBleedBoxPt to doNestListToCSV(listBleedBoxPt)
103  set strTrimBoxPt to doNestListToCSV(listTrimBoxPt)
104  set strCropBoxPt to doNestListToCSV(listCropBoxPt)
105  #MMサイズテキスト
106  set strMedeiaBoxMM to doNestListToCSVPtToMm(listMedeiaBoxPt)
107  set strBleedBoxMM to doNestListToCSVPtToMm(listBleedBoxPt)
108  set strTrimBoxMM to doNestListToCSVPtToMm(listTrimBoxPt)
109  set strCropBoxMM to doNestListToCSVPtToMm(listCropBoxPt)
110  ##1ページ目の縦横サイズmmを取得
111  set AppleScript's text item delimiters to ","
112  set listDelim to every text item of strCropBoxMM
113  set AppleScript's text item delimiters to ""
114  set strWmm to item 3 of listDelim
115  set strHmm to item 4 of listDelim
116  set strSetValue to ("1ページ目のCropサイズ\n幅mm\t" & strWmm & "\n縦mm\t" & strHmm & "\n") as text
117  (ocidOutPutString's appendString:(strSetValue))
118  (ocidOutPutString's appendString:("\n"))
119  ##表の項目部分
120  set strSetValue to ("NO\tページ番号\t回転\tMedia(pt)\tBleed(pt)\tTrim(pt)\tCrop(pt)\t留意\tMedia(mm)\tBleed(mm)\tTrim(mm)\tCrop(mm)") as text
121  set strSetValue to ("NO\tページ番号\t回転\tMedia(mm)\tBleed(mm)\tTrim(mm)\tCrop(mm)\t留意\tMedia(pt)\tBleed(pt)\tTrim(pt)\tCrop(pt)") as text
122  (ocidOutPutString's appendString:(strSetValue))
123  (ocidOutPutString's appendString:("\n"))
124  ##1ページ目の値をテキストに
125  set strSetValue to ("1\t1\t" & numRotationInt & "\t") as text
126  (ocidOutPutString's appendString:(strSetValue))
127  set strSetValue to (strMedeiaBoxMM & "\t" & strBleedBoxMM & "\t" & strTrimBoxMM & "\t" & strCropBoxMM & "\t \t ") as text
128  (ocidOutPutString's appendString:(strSetValue))
129  set strSetValue to (strMedeiaBoxPt & "\t" & strBleedBoxPt & "\t" & strTrimBoxPt & "\t" & strCropBoxPt & "\n") as text
130  (ocidOutPutString's appendString:(strSetValue))
131  
132  ###########################
133  #ページ数
134  set numCntPage to ocidActivDoc's pageCount()
135  #2ページ数から繰り返し
136  repeat with itemPageNo from 1 to (numCntPage - 2) by 1
137    set boolCaution to false as boolean
138    #指定ページのページデータを取得
139    set ocidActivPage to (ocidActivDoc's pageAtIndex:(itemPageNo))
140    #回転
141    set numRotation to ocidActivPage's |rotation|()
142    set strSetValue to ((itemPageNo + 1) & "\t" & (itemPageNo + 1) & "\t" & numRotation & "\t") as text
143    (ocidOutPutString's appendString:(strSetValue))
144    ##1ページ目の値と違う場合はチェックする
145    if numRotationInt ≠ numRotation then
146      set boolCaution to true as boolean
147    end if
148    #ページのBOX値の取得
149    set listMedeiaBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxMediaBox))
150    set listBleedBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxBleedBox))
151    set listTrimBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxTrimBox))
152    set listCropBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxCropBox))
153    #1ページ目の値と違う場合はチェックする
154    if listMedeiaBoxPt ≠ listMedeiaBox then
155      set boolCaution to true as boolean
156    else if listBleedBoxPt ≠ listBleedBox then
157      set boolCaution to true as boolean
158    else if listTrimBoxPt ≠ listTrimBox then
159      set boolCaution to true as boolean
160    else if listCropBoxPt ≠ listCropBox then
161      set boolCaution to true as boolean
162    end if
163    #######
164    #PTサイズテキスト
165    set strMedeiaBox to doNestListToCSV(listMedeiaBox)
166    set strBleedBox to doNestListToCSV(listBleedBox)
167    set strTrimBox to doNestListToCSV(listTrimBox)
168    set strCropBox to doNestListToCSV(listCropBox)
169    #MMサイズテキスト
170    set strMedeiaBoxMM to doNestListToCSVPtToMm(listMedeiaBox)
171    set strBleedBoxMM to doNestListToCSVPtToMm(listBleedBox)
172    set strTrimBoxMM to doNestListToCSVPtToMm(listTrimBox)
173    set strCropBoxMM to doNestListToCSVPtToMm(listCropBox)
174    ##テキストに入れる
175    if boolCaution is true then
176      set strSetValue to (strMedeiaBoxMM & "\t" & strBleedBoxMM & "\t" & strTrimBoxMM & "\t" & strCropBoxMM & "\t\t ") as text
177    else
178      set strSetValue to (strMedeiaBoxMM & "\t" & strBleedBoxMM & "\t" & strTrimBoxMM & "\t" & strCropBoxMM & "\t \t ") as text
179    end if
180    (ocidOutPutString's appendString:(strSetValue))
181    set strSetValue to (strMedeiaBoxPt & "\t" & strBleedBoxPt & "\t" & strTrimBoxPt & "\t" & strCropBoxPt & "\n") as text
182    (ocidOutPutString's appendString:(strSetValue))
183    ##PDFページ単位の終わり
184  end repeat
185  ##PDFファイル単位の終わり
186end repeat
187
188##保存して開く
189set boolDone to doSaveString(ocidOutPutString)
190
191#####################################
192#テンポラリーにテキストデータ補保存
193#####################################
194to doSaveString(argString)
195  #保存拡張子
196  set strExtension to ("tsv") as text
197  set strBaseFileName to ("PDF全ページサイズチェック") as text
198  #保存先ディレクトリ(再起動時に削除)
199  set appFileManager to refMe's NSFileManager's defaultManager()
200  set ocidTempDirURL to appFileManager's temporaryDirectory()
201  set ocidUUID to refMe's NSUUID's alloc()'s init()
202  set ocidUUIDString to ocidUUID's UUIDString
203  set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(true)
204  set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
205  ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
206  set listDone to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:(true) attributes:(ocidAttrDict) |error| :(reference)
207  if (item 1 of listDone) is true then
208    log "createDirectoryAtURL 正常処理"
209  else if (item 2 of listDone) ≠ (missing value) then
210    log (item 2 of listDone)'s code() as text
211    log (item 2 of listDone)'s localizedDescription() as text
212    log "createDirectoryAtURL エラーしました"
213    return false
214  end if
215  #保存ファイルパス
216  set ocidSaveBaseFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(strBaseFileName) isDirectory:(false)
217  set ocidSaveFilePathURL to ocidSaveBaseFilePathURL's URLByAppendingPathExtension:(strExtension)
218  #保存
219  set listDone to argString's writeToURL:(ocidSaveFilePathURL) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error| :(reference)
220  if (item 1 of listDone) is true then
221    log "writeToURL 正常処理"
222    ##開く ファイルを開く場合
223    set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
224    set boolDone to appSharedWorkspace's openURL:(ocidSaveFilePathURL)
225    #開くフォルダを開く場合
226    #set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
227    #set boolDone to appSharedWorkspace's openURL:(ocidSaveDirPathURL)
228    ##生成したTSVファイルをFinder上に表示
229    set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
230    set ocidOpenURLsArray to (refMe's NSMutableArray's alloc()'s initWithCapacity:0)
231    (ocidOpenURLsArray's addObject:(ocidSaveFilePathURL))
232    appSharedWorkspace's activateFileViewerSelectingURLs:(ocidOpenURLsArray)
233    
234    return true
235  else if (item 2 of listDone) ≠ (missing value) then
236    log (item 2 of listDone)'s code() as text
237    log (item 2 of listDone)'s localizedDescription() as text
238    log "writeToURL エラーしました"
239    return false
240  end if
241  
242end doSaveString
243#####################################
244#【A】PT{{x,y},{w,h}}をPTテキストの"x,y,w,h"
245#####################################
246to doNestListToCSV(argNestList)
247  #3を実行
248  set listTmpList to doDisChildArray(argNestList)
249  #2を実行
250  set strCSV to doListToCSV(listTmpList)
251  #で戻り値
252  return strCSV
253end doNestListToCSV
254
255#####################################
256#【B】PT{{x,y},{w,h}}をMMテキストの"x,y,w,h"
257#####################################
258to doNestListToCSVPtToMm(argNestList)
259  #3を実行
260  set listTmpList to doDisChildArray(argNestList)
261  #4を実行
262  set listMM to doLitPtToListMM(listTmpList)
263  #2を実行
264  set strCSV to doListToCSV(listMM)
265  return strCSV
266end doNestListToCSVPtToMm
267
268
269#####################################
270#【2】リスト{x,y,w,h}をテキストの"x,y,w,h"に
271#####################################
272to doListToCSV(argList)
273  set ocidArray to refMe's NSArray's arrayWithArray:(argList)
274  set ocidCSV to (ocidArray's componentsJoinedByString:(","))
275  set strCSV to ocidCSV as text
276  return strCSV
277end doListToCSV
278
279#####################################
280#【3】 {{x,y},{w,h}}  を{x,y,w,h}のリストに
281#####################################
282to doDisChildArray(argList)
283  set listOutPut to {} as list
284  repeat with itemChildArray in argList
285    repeat with itemArray in itemChildArray
286      copy itemArray to end of listOutPut
287    end repeat
288  end repeat
289  return listOutPut
290end doDisChildArray
291
292#####################################
293#【4】PT {x,y,w,h}をMM{x,y,w,h}のリストに
294#####################################
295to doLitPtToListMM(argPtList)
296  set listOutPut to {} as list
297  repeat with itemPt in argPtList
298    set strMM to doPtToMm(itemPt)
299    copy strMM to end of listOutPut
300  end repeat
301  return listOutPut
302end doLitPtToListMM
303
304
305##############################
306#PT to MM 小数点以下2位まで
307##############################
308to doPtToMm(argNumberPt)
309  set strNumberPt to argNumberPt as text
310  set ocidDecNo to refMe's NSDecimalNumber's alloc()'s initWithString:(strNumberPt)
311  set ocidDecPt to refMe's NSDecimalNumber's alloc()'s initWithString:("72")
312  set ocidNoDivPt to (ocidDecNo's decimalNumberByDividingBy:(ocidDecPt))
313  set ocidDecInch to refMe's NSDecimalNumber's alloc()'s initWithString:("25.4")
314  set ocidDecMM to (ocidNoDivPt's decimalNumberByMultiplyingBy:(ocidDecInch))
315  ###小数点2位まで
316  set appFormatter to refMe's NSNumberFormatter's alloc()'s init()
317  appFormatter's setRoundingMode:(refMe's NSNumberFormatterRoundHalfUp)
318  appFormatter's setNumberStyle:(refMe's NSNumberFormatterDecimalStyle)
319  appFormatter's setMaximumFractionDigits:(2)
320  #テキストにして戻す
321  set ocidMM to appFormatter's stringFromNumber:(ocidDecMM)
322  set strMM to ocidMM as text
323  return strMM
324end doPtToMm
325
326
327
AppleScriptで生成しました

|

A4Fit余白0でPDFファイルに印刷


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#! /usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003# com.cocolog-nifty.quicktimer.icefloe
004# A3のPDFをA4に簡易にサイズ変更できる
005----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
006use AppleScript version "2.8"
007use framework "Foundation"
008use framework "AppKit"
009use scripting additions
010
011property refMe : a reference to current application
012###################
013#設定項目 対象のUTI
014property strUTI : ("com.adobe.pdf") as text
015
016
017###################
018#Wクリックで実行
019on run
020  ###ダイアログを前面に出す
021  tell current application
022    set strName to name as text
023  end tell
024  if strName is "osascript" then
025    tell application "Finder" to activate
026  else
027    tell current application to activate
028  end if
029  #ダイアログ
030  set appFileManager to refMe's NSFileManager's defaultManager()
031  set ocidUserDesktopPathArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
032  set ocidUserDesktopPath to ocidUserDesktopPathArray's objectAtIndex:0
033  set listChooseFileUTI to {strUTI} as list
034  set strMesText to ("PDFファイルを選んでください") as text
035  set strPromptText to ("PDFファイルを選んでください") as text
036  set listChooseAliasFilePath to (choose file strMesText with prompt strPromptText default location (ocidUserDesktopPath as alias) of type listChooseFileUTI with invisibles and multiple selections allowed without showing package contents) as list
037  #サブルーチンに渡す
038  set boolDone to doAction(listChooseAliasFilePath)
039  #戻り値がエラーだったか?
040  if boolDone is false then
041    display alert "エラーが発生しました" message "エラーが発生しました"
042    return
043  end if
044  return "処理終了RUN"
045end run
046
047###################
048#ドロップ
049on open listDropAliasFilePath
050  #サブルーチンに渡すリスト
051  set listAliasFilePath to {} as list
052  #ドロップされたアイテムの数だけ繰り返す
053  repeat with itemDropAliasFilePath in listDropAliasFilePath
054    #エイリアス
055    set aliasItemFilePath to itemDropAliasFilePath as alias
056    tell application "Finder"
057      #Finder情報を取得して
058      set recordInfoFor to info for aliasItemFilePath
059    end tell
060    #UTIを取得
061    set strItemUIT to (type identifier of recordInfoFor) as text
062    #UTIが対象ファイルならリストに追加
063    if strItemUIT is strUTI then
064      copy aliasItemFilePath to end of listAliasFilePath
065    end if
066  end repeat
067  set numCntAliasList to (count of listAliasFilePath) as integer
068  if numCntAliasList > 0 then
069    #サブルーチンに渡す
070    set boolDone to doAction(listAliasFilePath)
071  else
072    display alert "エラーが発生しました対象のファイルではありません"
073    return "エラー終了open"
074  end if
075  #戻り値がエラーだったか?
076  if boolDone is false then
077    display alert "エラーが発生しました" message "エラーが発生しました"
078    return "エラー終了open"
079  end if
080  return "処理終了open"
081  
082end open
083
084###################
085#実行されるのはこれ
086to doAction(argListAliasFilePath)
087  ###################
088  #用紙
089  set ocidA4RectP to refMe's NSRect's NSMakeRect(0, 0, 595.28, 841.89)
090  set ocidA4SizeP to refMe's NSSize's NSMakeSize(595.28, 841.89)
091  set ocidA4RectH to refMe's NSRect's NSMakeRect(0, 0, 841.89, 595.28)
092  set ocidA4SizeH to refMe's NSSize's NSMakeSize(841.89, 595.28)
093  
094  #ファイルエイリアスリストを順番の処理
095  repeat with itemAliasFilePath in argListAliasFilePath
096    #入力ファイル
097    set aliasFilePath to itemAliasFilePath as alias
098    set strFilePath to (POSIX path of aliasFilePath) as text
099    set ocidFilePathStr to (refMe's NSString's stringWithString:(strFilePath))
100    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
101    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:false)
102    #ファイル名
103    set ocidBaseFilePathURL to ocidFilePathURL's URLByDeletingPathExtension()
104    set ocidBaseFileName to ocidBaseFilePathURL's lastPathComponent()
105    #出力先(デスクトップ)
106    set appFileManager to refMe's NSFileManager's defaultManager()
107    set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
108    set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
109    #パス
110    set ocidBaseSaveFilePathURL to (ocidDesktopDirPathURL's URLByAppendingPathComponent:(ocidBaseFileName) isDirectory:(false))
111    set ocidSaveFilePathURL to (ocidBaseSaveFilePathURL's URLByAppendingPathExtension:("PrintA4P.pdf"))
112    #####################
113    #PDFDocument's
114    set ocidActivDoc to (refMe's PDFDocument's alloc()'s initWithURL:(ocidFilePathURL))
115    #####################
116    #全ページサイズを調べて最大値
117    set numCntAllPage to ocidActivDoc's pageCount() as integer
118    #
119    set numMaxWpt to 0 as integer
120    set numMaxHpt to 0 as integer
121    #順番に
122    repeat with itemNo from 0 to (numCntAllPage - 1) by 1
123      #ページを取得して
124      set ocidActivPage to (ocidActivDoc's pageAtIndex:(itemNo))
125      #サイズを取得
126      set ocidPageBounds to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxTrimBox))
127      set listPageSize to (item 2 of ocidPageBounds) as list
128      set numWpt to (item 1 of listPageSize) as integer
129      set numHpt to (item 2 of listPageSize) as integer
130      #最大値を格納していく
131      if numWpt > numMaxWpt then
132        set numMaxWpt to numWpt as integer
133      end if
134      if numHpt > numMaxHpt then
135        set numMaxHpt to numHpt as integer
136      end if
137    end repeat
138    #####################
139    #縦型か?横型か?
140    if numMaxWpt ≥ numMaxHpt then
141      # 横型 か 正方形
142      set ocidOrientation to (refMe's NSPaperOrientationLandscape)
143    else
144      #縦型
145      set ocidOrientation to (refMe's NSPaperOrientationPortrait)
146    end if
147    #読み込みページサイズ
148    set ocidMaxSize to refMe's NSSize's NSMakeSize(numMaxWpt, numMaxHpt)
149    #拡大縮小率
150    set numScaling to (595.28 / numMaxWpt) as number
151    
152    #####################
153    # PrintInfo
154    #サイズと 保存先を指定(ここは要カスタマイズ
155    set ocidPrinterInfo to doSetPrintInfo(numScaling, ocidA4SizeP, ocidOrientation, ocidSaveFilePathURL)
156    
157    try
158      #####################
159      #印刷 PrintOperation
160      #kPDFPrintPageScaleDownToFit kPDFPrintPageScaleNone kPDFPrintPageScaleToFit
161      set ocidPrintOperation to (ocidActivDoc's printOperationForPrintInfo:(ocidPrinterInfo) scalingMode:(refMe's kPDFPrintPageScaleToFit) autoRotate:(true))
162      (ocidPrintOperation's setShowsPrintPanel:(false))
163      (ocidPrintOperation's setShowsProgressPanel:(false))
164      #実行
165      set boolDone to ocidPrintOperation's runOperation()
166    on error
167      #エラーをログにする
168      refMe's NSLog("■■■: サブルーチンでエラーになりました")
169      return false
170    end try
171    if boolDone is false then
172      return false
173    end if
174  end repeat
175  #全部エラーなく終わったらtrueを戻す
176  return true
177end doAction
178
179###############
180#NSPrintInfo
181to doSetPrintInfo(argScaling, argPaperSize, argOrientation, argSaveFilePathURL)
182  #AttributeKeyDict
183  set ocidPrinterInfoDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
184  #
185  ocidPrinterInfoDict's setObject:(refMe's NSPrintSaveJob) forKey:(refMe's NSPrintJobDisposition)
186  ocidPrinterInfoDict's setObject:(argSaveFilePathURL) forKey:(refMe's NSPrintJobSavingURL)
187  #
188  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:true) forKey:(refMe's NSPrintMustCollate)
189  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithInteger:(2)) forKey:(refMe's NSPrintPagesAcross)
190  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithInteger:(1)) forKey:(refMe's NSPrintPagesDown)
191  #
192  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:true) forKey:(refMe's NSPrintAllPages)
193  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithInteger:(1)) forKey:(refMe's NSPrintCopies)
194  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:false) forKey:(refMe's NSPrintDetailedErrorReporting)
195  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:false) forKey:(refMe's NSPrintHeaderAndFooter)
196  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:false) forKey:(refMe's NSPrintReversePageOrder)
197  #
198  ocidPrinterInfoDict's setObject:(refMe's NSString's stringWithString:"A4") forKey:(refMe's NSPrintPaperName)
199  ocidPrinterInfoDict's setObject:(argPaperSize) forKey:(refMe's NSPrintPaperSize)
200  #
201  ocidPrinterInfoDict's setObject:(argOrientation) forKey:(refMe's NSPrintOrientation)
202  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithDouble:(argScaling)) forKey:(refMe's NSPrintScalingFactor)
203  #Margin
204  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithDouble:(0.0)) forKey:(refMe's NSPrintLeftMargin)
205  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithDouble:(0.0)) forKey:(refMe's NSPrintRightMargin)
206  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithDouble:(0.0)) forKey:(refMe's NSPrintTopMargin)
207  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithDouble:(0.0)) forKey:(refMe's NSPrintBottomMargin)
208  #
209  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:true) forKey:(refMe's NSPrintHorizontallyCentered)
210  ocidPrinterInfoDict's setObject:(refMe's NSNumber's numberWithBool:true) forKey:(refMe's NSPrintVerticallyCentered)
211  #NSPrintingPaginationModeAutomatic NSPrintingPaginationModeFit NSPrintingPaginationModeClip
212  ocidPrinterInfoDict's setObject:(refMe's NSPrintingPaginationModeFit) forKey:(refMe's NSPrintHorizontalPagination)
213  ocidPrinterInfoDict's setObject:(refMe's NSPrintingPaginationModeFit) forKey:(refMe's NSPrintVerticalPagination)
214  #
215  set ocidPrinterInfo to refMe's NSPrintInfo's alloc()'s initWithDictionary:(ocidPrinterInfoDict)
216  #
217  return ocidPrinterInfo
218  
219end doSetPrintInfo
AppleScriptで生成しました

|

[PDFKit]メタデータ文書情報を全て削除(ドロップレット)


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#! /usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003# com.cocolog-nifty.quicktimer.icefloe
004# 前提条件
005#  PDFKitで保存するのでCreatorの属性にQuartz PDFContextが入る
006# 別名で保存からアプリケーションでドロップレットになります
007----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
008use AppleScript version "2.8"
009use framework "Foundation"
010use framework "AppKit"
011use framework "PDFKit"
012use scripting additions
013
014property refMe : a reference to current application
015###################
016#設定項目 対象のUTI
017property strUTI : ("com.adobe.pdf") as text
018
019###################
020#Wクリックで実行
021on run
022  ###ダイアログを前面に出す
023  tell current application
024    set strName to name as text
025  end tell
026  if strName is "osascript" then
027    tell application "Finder" to activate
028  else
029    tell current application to activate
030  end if
031  #ダイアログ
032  set appFileManager to refMe's NSFileManager's defaultManager()
033  set ocidUserDesktopPathArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
034  set ocidUserDesktopPath to ocidUserDesktopPathArray's objectAtIndex:0
035  set listChooseFileUTI to {strUTI} as list
036  set strMesText to ("PDFファイルを選んでください") as text
037  set strPromptText to ("PDFファイルを選んでください") as text
038  set listChooseAliasFilePath to (choose file strMesText with prompt strPromptText default location (ocidUserDesktopPath as alias) of type listChooseFileUTI with invisibles and multiple selections allowed without showing package contents) as list
039  #サブルーチンに渡す
040  set boolDone to doAction(listChooseAliasFilePath)
041  #戻り値がエラーだったか?
042  if boolDone is false then
043    display alert "エラーが発生しました" message "エラーが発生しました"
044    return
045  end if
046  return "処理終了RUN"
047end run
048
049###################
050#ドロップ
051on open listDropAliasFilePath
052  #サブルーチンに渡すリスト
053  set listAliasFilePath to {} as list
054  #ドロップされたアイテムの数だけ繰り返す
055  repeat with itemDropAliasFilePath in listDropAliasFilePath
056    #エイリアス
057    set aliasItemFilePath to itemDropAliasFilePath as alias
058    tell application "Finder"
059      #Finder情報を取得して
060      set recordInfoFor to info for aliasItemFilePath
061    end tell
062    #UTIを取得
063    set strItemUIT to (type identifier of recordInfoFor) as text
064    #UTIが対象ファイルならリストに追加
065    if strItemUIT is strUTI then
066      copy aliasItemFilePath to end of listAliasFilePath
067    end if
068  end repeat
069  set numCntAliasList to (count of listAliasFilePath) as integer
070  if numCntAliasList > 0 then
071    #サブルーチンに渡す
072    set boolDone to doAction(listAliasFilePath)
073  else
074    display alert "エラーが発生しました対象のファイルではありません"
075    return "エラー終了open"
076  end if
077  #戻り値がエラーだったか?
078  if boolDone is false then
079    display alert "エラーが発生しました" message "エラーが発生しました"
080    return "エラー終了open"
081  end if
082  return "処理終了open"
083  
084end open
085
086###################
087#実行されるのはこれ
088to doAction(argListAliasFilePath)
089  #ファイルエイリアスリストを順番の処理
090  repeat with itemAliasFilePath in argListAliasFilePath
091    set aliasFilePath to itemAliasFilePath as alias
092    set strFilePath to (POSIX path of aliasFilePath) as text
093    set ocidFilePathStr to (refMe's NSString's stringWithString:(strFilePath))
094    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
095    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:false)
096    #
097    #####PDFDocumentとして読み込み
098    set ocidActivDoc to (refMe's PDFDocument's alloc()'s initWithURL:ocidFilePathURL)
099    #####暗号化チェック
100    set boolEncrypted to ocidActivDoc's isEncrypted()
101    if boolEncrypted is true then
102      log strFileName & "暗号化されています"
103      return false
104    end if
105    #####ロック確認
106    set boolLocked to ocidActivDoc's isLocked()
107    if boolLocked is true then
108      log strFileName & "パスワードでロックされています"
109      return false
110    end if
111    #####アトリビュートを取得して
112    set ocidAttributes to ocidActivDoc's documentAttributes()
113    ######可変ディクショナリに格納
114    set ocidAttrDict to (refMe's NSMutableDictionary's alloc()'s initWithDictionary:(ocidAttributes))
115    #####アトリビュートのキーを取得
116    set ocidAllKeysArray to ocidAttrDict's allKeys()
117    #####キーの数だけ繰り返し
118    repeat with itemKeysArray in ocidAllKeysArray
119      ####キーをテキストで確定させて--> 不要なんだけどログ取りやすいので
120      set serItemKeys to itemKeysArray as text
121      ###各キーの内容をブランクにする
122      (ocidAttrDict's setValue:("") forKey:(serItemKeys))
123    end repeat
124    #####値を変更したレコードをセットする
125    (ocidActivDoc's setDocumentAttributes:(ocidAttrDict))
126    ##################
127    set boolDone to (ocidActivDoc's writeToURL:(ocidFilePathURL))
128    if boolDone is true then
129      log "正常処理"
130    else if boolDone is false then
131      return false
132    end if
133  end repeat
134  #全部エラーなく終わったらtrueを戻す
135  return true
136end doAction
AppleScriptで生成しました

|

[PDFAnnotation]/AAPL:AKExtrasはキーアーカイブされたPLIST


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#! /usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#
004#  com.cocolog-nifty.quicktimer.icefloe
005----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
006use AppleScript version "2.8"
007use framework "Foundation"
008use framework "AppKit"
009use framework "PDFKit"
010use scripting additions
011
012property refMe : a reference to current application
013set appFileManager to refMe's NSFileManager's defaultManager()
014
015################################
016#パス関連
017set strFilePath to "~/Desktop/スタンプサンプル.pdf" as text
018set ocidFilePathStr to refMe's NSString's stringWithString:(strFilePath)
019set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
020set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:false)
021
022################################
023#PDF
024###ドキュメント
025set ocidActivDoc to refMe's PDFDocument's alloc()'s initWithURL:(ocidFilePathURL)
026###ページ(テンプレートが1ページしかない)
027set ocidActivPage to ocidActivDoc's pageAtIndex:(0)
028###アノテーション
029set ocidAnnotationArray to ocidActivPage's annotations()
030############################################
031###アノテーションの数だけ繰り返し
032repeat with itemAnnotation in ocidAnnotationArray
033  set strAnnoType to itemAnnotation's type() as text
034  ###対象はフォーム以外
035  log itemAnnotation's annotationKeyValues() as record
036  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeySubtype)) as text
037  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyName)) as text
038  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyContents)) as text
039  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyFlags))'s className() as text
040  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyPage)) as text
041  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyParent)) as text
042  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyQuadPoints)) as text
043  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyRect)) as list
044  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyTextLabel)) as list
045  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyAppearanceState)) as text
046  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyBorder)) as list
047  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyBorderStyle)) as text
048  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyColor))'s className() as text
049  log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyPopup))'s className() as text
050  # log (itemAnnotation's valueForAnnotationKey:(refMe's PDFAnnotationKeyAppearanceDictionary)) as record
051  log (itemAnnotation's valueForAnnotationKey:("/AAPL:AKExtras"))'s className() as text
052  set ocidAaplDict to (itemAnnotation's valueForAnnotationKey:("/AAPL:AKExtras"))
053  set ocidData to (ocidAaplDict's objectForKey:("/AAPL:AKAnnotationObject"))
054  log className() of ocidData as text
055  #BASE64エンコードされているのでデコードする
056  set ocidOption to (refMe's NSDataBase64DecodingIgnoreUnknownCharacters)
057  set ocidDecodeData to (refMe's NSData's alloc()'s initWithBase64EncodedString:(ocidData) options:(ocidOption))
058  #PLISTに変換して
059  set ocidFormat to (refMe's NSPropertyListBinaryFormat_v1_0)
060  set ocidPlistSerial to refMe's NSPropertyListSerialization
061  set ocidOption to refMe's NSPropertyListMutableContainersAndLeaves
062  set listPlistDict to (ocidPlistSerial's propertyListWithData:(ocidDecodeData) options:(ocidOption) format:(ocidFormat) |error| :(reference))
063  set ocidPlistDict to (item 1 of listPlistDict)
064  #CLASSNAMEを調べるためにリストに
065  log (ocidPlistDict's objectForKey:("$objects")) as list
066  #ファイルに保存する
067  set strSaveFilePath to "~/Desktop/AKAnnotationObject.plist" as text
068  set ocidSaveFilePathStr to (refMe's NSString's stringWithString:(strSaveFilePath))
069  set ocidSaveFilePath to ocidSaveFilePathStr's stringByStandardizingPath()
070  set ocidSaveFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidSaveFilePath) isDirectory:false)
071  
072  set boolDone to (ocidPlistDict's writeToURL:(ocidSaveFilePathURL) atomically:true)
073  
074  
075  # log itemAnnotation's stampName() as text
076  return
077end repeat
078
AppleScriptで生成しました

キーアーカイブされたPLISTの中身はこんな感じ
サンプルコード

サンプルソース(参考)
行番号ソース
001<?xml version="1.0" encoding="UTF-8"?>
002<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
003<plist version="1.0">
004<dict>
005  <key>$archiver</key>
006  <string>NSKeyedArchiver</string>
007  <key>$objects</key>
008  <array>
009    <string>$null</string>
010    <dict>
011      <key>$class</key>
012      <dict>
013        <key>CF$UID</key>
014        <integer>16</integer>
015      </dict>
016      <key>AKIsFormFieldKey</key>
017      <false/>
018      <key>UUID</key>
019      <dict>
020        <key>CF$UID</key>
021        <integer>2</integer>
022      </dict>
023      <key>akPlat</key>
024      <integer>1</integer>
025      <key>akVers</key>
026      <integer>2</integer>
027      <key>author</key>
028      <dict>
029        <key>CF$UID</key>
030        <integer>3</integer>
031      </dict>
032      <key>customPlaceholderText</key>
033      <dict>
034        <key>CF$UID</key>
035        <integer>0</integer>
036      </dict>
037      <key>editsDisableAppearanceOverride</key>
038      <false/>
039      <key>formContentType</key>
040      <integer>0</integer>
041      <key>hasShadow</key>
042      <false/>
043      <key>horizontallyFlipped</key>
044      <false/>
045      <key>modificationDate</key>
046      <dict>
047        <key>CF$UID</key>
048        <integer>4</integer>
049      </dict>
050      <key>originalExifOrientation</key>
051      <integer>1</integer>
052      <key>originalModelBaseScaleFactor</key>
053      <real>0.5647058823529412</real>
054      <key>rectangle</key>
055      <dict>
056        <key>CF$UID</key>
057        <integer>6</integer>
058      </dict>
059      <key>rotationAngle</key>
060      <real>0</real>
061      <key>shouldUsePlaceholderText</key>
062      <true/>
063      <key>textIsClipped</key>
064      <false/>
065      <key>textIsFixedHeight</key>
066      <false/>
067      <key>textIsFixedWidth</key>
068      <false/>
069      <key>verticallyFlipped</key>
070      <false/>
071    </dict>
072    <string>F996F2EB-0842-4834-B117-B34946CC596C</string>
073    <dict>
074      <key>$class</key>
075      <dict>
076        <key>CF$UID</key>
077        <integer>5</integer>
078      </dict>
079      <key>NS.time</key>
080      <real>741148986.855148</real>
081    </dict>
082    <dict>
083      <key>$classes</key>
084      <array>
085        <string>NSDate</string>
086        <string>NSObject</string>
087      </array>
088      <key>$classname</key>
089      <string>NSDate</string>
090    </dict>
091    <dict>
092      <key>$class</key>
093      <dict>
094        <key>CF$UID</key>
095        <integer>15</integer>
096      </dict>
097      <key>NS.keys</key>
098      <array>
099        <dict>
100          <key>CF$UID</key>
101          <integer>7</integer>
102        </dict>
103        <dict>
104          <key>CF$UID</key>
105          <integer>8</integer>
106        </dict>
107        <dict>
108          <key>CF$UID</key>
109          <integer>9</integer>
110        </dict>
111        <dict>
112          <key>CF$UID</key>
113          <integer>10</integer>
114        </dict>
115      </array>
116      <key>NS.objects</key>
117      <array>
118        <dict>
119          <key>CF$UID</key>
120          <integer>11</integer>
121        </dict>
122        <dict>
123          <key>CF$UID</key>
124          <integer>12</integer>
125        </dict>
126        <dict>
127          <key>CF$UID</key>
128          <integer>13</integer>
129        </dict>
130        <dict>
131          <key>CF$UID</key>
132          <integer>14</integer>
133        </dict>
134      </array>
135    </dict>
136    <string>Width</string>
137    <string>Height</string>
138    <string>Y</string>
139    <string>X</string>
140    <real>118.3973852941176</real>
141    <real>121.5608529411763</real>
142    <real>109.8928235294118</real>
143    <real>67.42687941176467</real>
144    <dict>
145      <key>$classes</key>
146      <array>
147        <string>NSMutableDictionary</string>
148        <string>NSDictionary</string>
149        <string>NSObject</string>
150      </array>
151      <key>$classname</key>
152      <string>NSMutableDictionary</string>
153    </dict>
154    <dict>
155      <key>$classes</key>
156      <array>
157        <string>AKImageAnnotation</string>
158        <string>AKAnnotation</string>
159        <string>NSObject</string>
160      </array>
161      <key>$classname</key>
162      <string>AKImageAnnotation</string>
163    </dict>
164  </array>
165  <key>$top</key>
166  <dict>
167    <key>root</key>
168    <dict>
169      <key>CF$UID</key>
170      <integer>1</integer>
171    </dict>
172  </dict>
173  <key>$version</key>
174  <integer>100000</integer>
175</dict>
176</plist>
AppleScriptで生成しました

|

PDFに権限パスワードを設定する(エラー制御を少し修正)


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003# com.cocolog-nifty.quicktimer.icefloe
004----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
005use AppleScript version "2.8"
006use framework "Foundation"
007use framework "AppKit"
008use framework "PDFKit"
009use framework "Quartz"
010use framework "QuartzCore"
011use framework "CoreGraphics"
012use scripting additions
013
014property refMe : a reference to current application
015
016####所有者パスワード
017property boolOwnerPW : true as boolean
018####アクアセス権
019##  property intAllowNo : 0 as integer
020(*
021例:全部OKの場合 255 全部ロックは0
022許可する番号を『足し算』する
023低解像度印刷    (*1*) PDFAllowsLowQualityPrinting
024高解像度印刷    (*2*) refMe's PDFAllowsHighQualityPrinting
025文書に変更     (*4*) refMe's PDFAllowsDocumentChanges
026アッセンブリ    (*8*) refMe's PDFAllowsDocumentAssembly
027コンテンツコピー(*16*) refMe's PDFAllowsContentCopying
028アクセシビリティ(*32*) refMe's PDFAllowsContentAccessibility
029コメント注釈    (*64*) refMe's PDFAllowsCommenting
030フォーム入力    (*128*) refMe's PDFAllowsFormFieldEntry
031*)
032
033on run
034  ###ダイアログを前面に出す
035  tell current application
036    set strName to name as text
037  end tell
038  ####スクリプトメニューから実行したら
039  if strName is "osascript" then
040    tell application "Finder" to activate
041  else
042    tell current application to activate
043  end if
044  set appFileManager to refMe's NSFileManager's defaultManager()
045  set ocidUserDesktopPathArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
046  set ocidUserDesktopPath to ocidUserDesktopPathArray's objectAtIndex:0
047  set listChooseFileUTI to {"com.adobe.pdf"}
048  set strPromptText to "PDFファイルを選んでください" as text
049  set listDropObject to (choose file with prompt strPromptText default location (ocidUserDesktopPath as alias) of type listChooseFileUTI with invisibles and multiple selections allowed without showing package contents) as list
050  open listDropObject
051end run
052
053on open listDropObject
054  
055  set recordOption to {|0開封PW有|:999, |1低解像度印刷|:1, |2高解像度印刷|:2, |4文書に変更|:4, |8内容変更|:8, |16コンテンツコピー|:16, |32補助装置利用可|:32, |64コメント注釈|:64, |128フォーム入力|:128} as record
056  
057  set ocidOptionDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
058  ocidOptionDict's setDictionary:(recordOption)
059  set ocidAllKeys to ocidOptionDict's allKeys()
060  set ocidSortedArray to ocidAllKeys's sortedArrayUsingSelector:("localizedStandardCompare:")
061  set listAllKeys to ocidSortedArray as list
062  
063  ##############################
064  ###ダイアログを前面に出す
065  tell current application
066    set strName to name as text
067  end tell
068  ###スクリプトメニューから実行したら
069  if strName is "osascript" then
070    tell application "Finder" to activate
071  else
072    tell current application to activate
073  end if
074  ###
075  set strTitle to "『禁止設定する』オプション選択(複数可)" as text
076  set strPrompt to "『禁止設定』するオプションを選択してください\r何も選択しない=全部許可\r何も選択しない場合所有者PWの設定とページ抽出とコンテンツの変更は禁止になります\r\r複数選択はコマンド⌘キーを押しながらクリック" as text
077  try
078    set listResponse to (choose from list listAllKeys with title strTitle with prompt strPrompt default items (item 1 of listAllKeys) OK button name "OK" cancel button name "キャンセル" with multiple selections allowed and empty selection allowed) as list
079  on error
080    log "エラーしました"
081    return "エラーしました"
082    error "エラーしました" number -200
083  end try
084  if listResponse = {} then
085    log "何も選択していない"
086    set boolOpenPW to false as boolean
087    set intAllowNo to 0 as integer
088  else if (item 1 of listResponse) is false then
089    return "キャンセルしました"
090    error "キャンセルしました" number -200
091  else
092    set boolOpenPW to false as boolean
093    set intAllowNo to 0 as integer
094    repeat with itemResponse in listResponse
095      set intValue to (ocidOptionDict's valueForKey:(itemResponse)) as integer
096      if intValue = 999 then
097        set boolOpenPW to true as boolean
098      else
099        set intAllowNo to intAllowNo + intValue
100      end if
101    end repeat
102  end if
103  
104  set intAllowNo to (255 - intAllowNo) as integer
105  
106  ###############################
107  ##実際の処理するPDFのURLを格納するリスト
108  set ocidDropPathURLArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
109  ###ドロップされたエイリアスの数だけ繰り返し
110  repeat with itemDropObject in listDropObject
111    ###処理除外するエイリアスを判定する
112    set strFilePaht to (POSIX path of itemDropObject) as text
113    set ocidFilePathStr to (refMe's NSString's stringWithString:(strFilePaht))
114    set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
115    set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath))
116    ###フォルダか?判定
117    set listResponse to (ocidFilePathURL's getResourceValue:(reference) forKey:(refMe's NSURLIsDirectoryKey) |error| :(reference))
118    if (item 3 of listResponse) = (missing value) then
119      log "正常処理"
120      set ocidURLvalue to (item 2 of listResponse)
121    else if (item 3 of listResponse) ≠ (missing value) then
122      set strErrorNO to (item 2 of listDone)'s code() as text
123      set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
124      refMe's NSLog("■:" & strErrorNO & strErrorMes)
125      return "エラーしました" & strErrorNO & strErrorMes
126    end if
127    #フォルダじゃ無いって事は?
128    if ocidURLvalue = (refMe's NSNumber's numberWithBool:false) then
129      set listURLvalue to (ocidFilePathURL's getResourceValue:(reference) forKey:(refMe's NSURLContentTypeKey) |error| :(reference))
130      if (item 3 of listResponse) = (missing value) then
131        log "正常処理"
132        #UTIを取得して
133        set strURLvalue to (item 2 of listURLvalue)'s identifier() as text
134      else if (item 3 of listResponse) ≠ (missing value) then
135        set strErrorNO to (item 2 of listDone)'s code() as text
136        set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
137        refMe's NSLog("■:" & strErrorNO & strErrorMes)
138        return "エラーしました" & strErrorNO & strErrorMes
139      end if
140      ###getResourceValueの戻り値がNULLだった場合対策
141      if strURLvalue is "" then
142        tell application "Finder"
143          set objInfo to info for aliasFilePath
144          set strURLvalue to type identifier of objInfo as text
145        end tell
146      end if
147      ###UTIがPDFのエイリアスだけ処理する
148      if strURLvalue is "com.adobe.pdf" then
149        #####PDFDocumentとして読み込み
150        set ocidChkDoc to (refMe's PDFDocument's alloc()'s initWithURL:(ocidFilePathURL))
151        ########################################
152        #####暗号化チェック
153        set boolEncrypted to ocidChkDoc's isEncrypted()
154        if boolEncrypted is true then
155          set strMes to "エラー:すでに暗号化されているので変更できません" as text
156          display alert strMes buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 3
157          refMe's NSLog("■:" & strMes)
158          return strMes
159        end if
160        ########################################
161        #####ロック確認
162        set boolLocked to ocidChkDoc's isLocked()
163        log boolEncrypted
164        if boolLocked is true then
165          set strMes to "エラー:すでにパスワードでロックされているので変更できません" as text
166          display alert strMes buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 3
167          refMe's NSLog("■:" & strMes)
168          return strMes
169        end if
170        (ocidDropPathURLArray's addObject:(ocidFilePathURL))
171      else
172        set strMes to "エラー:PDF専用です" as text
173        display alert strMes buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 3
174        refMe's NSLog("■:" & strMes)
175        return strMes
176      end if
177    else
178      set strMes to "エラー:PDF専用です" as text
179      display alert strMes buttons {"OK", "キャンセル"} default button "OK" as informational giving up after 3
180      refMe's NSLog("■:" & strMes)
181      return strMes
182    end if
183  end repeat
184  
185  repeat with itemPathURL in ocidDropPathURLArray
186    set ocidFileName to itemPathURL's lastPathComponent()
187    set strBaseFileName to ocidFileName's stringByDeletingPathExtension() as text
188    ###PW設定は複製したPDFに対して行うため保存先ディレクトリを作る
189    set strDirName to (strBaseFileName & "_PW設定済")
190    set ocidContainerDirURL to itemPathURL's URLByDeletingLastPathComponent()
191    set ocidDistFolderURL to (ocidContainerDirURL's URLByAppendingPathComponent:(strDirName))
192    set ocidSavePdfURL to (ocidDistFolderURL's URLByAppendingPathComponent:(ocidFileName))
193    ####ファイル移動先
194    set appFileManager to refMe's NSFileManager's defaultManager()
195    set ocidAttrDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
196    (ocidAttrDict's setValue:511 forKey:(refMe's NSFilePosixPermissions))
197    set listDone to (appFileManager's createDirectoryAtURL:ocidDistFolderURL withIntermediateDirectories:true attributes:ocidAttrDict  |error| :(reference))
198    if (item 1 of listDone) is true then
199      log "正常処理"
200    else if (item 2 of listDone) ≠ (missing value) then
201      set strErrorNO to (item 2 of listDone)'s code() as text
202      set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
203      refMe's NSLog("■:" & strErrorNO & strErrorMes)
204      return "エラーしました" & strErrorNO & strErrorMes
205    end if
206    
207    ####コピー
208    set listDone to (appFileManager's copyItemAtURL:(itemPathURL) toURL:(ocidSavePdfURL) |error| :(reference))
209    if (item 1 of listDone) is true then
210      log "正常処理"
211    else if (item 2 of listDone) ≠ (missing value) then
212      set strErrorNO to (item 2 of listDone)'s code() as text
213      set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
214      refMe's NSLog("■:" & strErrorNO & strErrorMes)
215      return "エラーしました" & strErrorNO & strErrorMes
216    end if
217    
218    #####PDFDocumentとして読み込み
219    set ocidActivDoc to (refMe's PDFDocument's alloc()'s initWithURL:(ocidSavePdfURL))
220    ########################################
221    #####パスワード生成 UUIDを利用
222    set strTextFileName to strBaseFileName & ".pw.txt"
223    set ocidTextFilePathURL to (ocidDistFolderURL's URLByAppendingPathComponent:strTextFileName)
224    #####生成したUUIDからハイフンを取り除く
225    set ocidUUIDString to (refMe's NSMutableString's alloc()'s initWithCapacity:0)
226    set ocidConcreteUUID to refMe's NSUUID's UUID()
227    (ocidUUIDString's setString:(ocidConcreteUUID's UUIDString()))
228    set ocidUUIDRange to (ocidUUIDString's rangeOfString:ocidUUIDString)
229    (ocidUUIDString's replaceOccurrencesOfString:("-") withString:("") options:(refMe's NSRegularExpressionSearch) range:ocidUUIDRange)
230    
231    
232    set strOwnerPassword to ocidUUIDString as text
233    ##保存用テキストにする
234    set strTextFile to "所有者用Pw\n" & strOwnerPassword & "\n" as text
235    if boolOpenPW is true then
236      #####生成したUUIDからハイフンを取り除く
237      set ocidUUIDString to (refMe's NSMutableString's alloc()'s initWithCapacity:0)
238      set ocidConcreteUUID to refMe's NSUUID's UUID()
239      (ocidUUIDString's setString:(ocidConcreteUUID's UUIDString()))
240      set ocidUUIDRange to (ocidUUIDString's rangeOfString:ocidUUIDString)
241      (ocidUUIDString's replaceOccurrencesOfString:("-") withString:("") options:(refMe's NSRegularExpressionSearch) range:ocidUUIDRange)
242      ##保存用テキストにする
243      set strUserPassword to ocidUUIDString as text
244      set strTextFile to strTextFile & "利用者用Pw(他者に教える場合はこちら↓)\n" & strUserPassword & "\n" as text
245    end if
246    set ocidPWString to (refMe's NSString's stringWithString:strTextFile)
247    set ocidUUIDData to (ocidPWString's dataUsingEncoding:(refMe's NSUTF8StringEncoding))
248    ##PWをテキストで保存する
249    set boolResults to (ocidUUIDData's writeToURL:ocidTextFilePathURL atomically:true)
250    ########################################
251    #####保存OPTION
252    set ocidOptionDict to (refMe's NSMutableDictionary's alloc()'s initWithCapacity:0)
253    if boolOwnerPW = true then
254      (ocidOptionDict's setObject:strOwnerPassword forKey:(refMe's PDFDocumentOwnerPasswordOption))
255    end if
256    if boolOpenPW = true then
257      ####開封パスワード
258      (ocidOptionDict's setObject:strUserPassword forKey:(refMe's PDFDocumentUserPasswordOption))
259    end if
260    ###セキュリティ設定
261    (ocidOptionDict's setObject:(intAllowNo) forKey:(refMe's PDFDocumentAccessPermissionsOption))
262    ##################
263    ###保存
264    ##################
265    set boolResults to (ocidActivDoc's writeToURL:(ocidSavePdfURL) withOptions:(ocidOptionDict))
266  end repeat
267end open
AppleScriptで生成しました

|

PDFの全ページで各種BOXのサイズとページの回転をチェックしてTSVに出力する(仮)


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#! /usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#
004#PDFのページサイズの設定値と回転の値を
005#全ページ取得してテキスト(タブ区切り)で出力します
006#必要に迫られて作っているので制御甘めなので(仮)
007#
008# com.cocolog-nifty.quicktimer.icefloe
009----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
010use AppleScript version "2.6"
011use framework "Foundation"
012use framework "AppKit"
013use scripting additions
014
015property refMe : a reference to current application
016
017#######################################
018#ダイアログ
019tell current application
020  set strName to name as text
021end tell
022if strName is "osascript" then
023  tell application "Finder"
024    activate
025  end tell
026else
027  tell current application
028    activate
029  end tell
030end if
031#######################################
032#ファイル選択ダイアログ
033set appFileManager to refMe's NSFileManager's defaultManager()
034set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
035set ocidDocumentDirPathURL to ocidURLsArray's firstObject()
036set aliasDefaultLocation to (ocidDocumentDirPathURL's absoluteURL()) as alias
037tell application "Finder"
038end tell
039set listChooseFileUTI to {"com.adobe.pdf"}
040set strPromptText to "PDFファイルを選んでください" as text
041set listAliasFilePath to (choose file with prompt strPromptText default location (aliasDefaultLocation) of type listChooseFileUTI with invisibles, multiple selections allowed and showing package contents) as list
042
043#######################################
044#出力用のテキスト
045set ocidOutPutString to refMe's NSMutableString's alloc()'s initWithCapacity:(0)
046
047#######################################
048#選んだファイルの数だけ繰り返す
049repeat with aliasFilePath in listAliasFilePath
050  #入力パス
051  set strFilePath to (POSIX path of aliasFilePath) as text
052  set ocidFilePathStr to (refMe's NSString's stringWithString:(strFilePath))
053  set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
054  set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:(false))
055  set ocidFileName to ocidFilePathURL's lastPathComponent()
056  set strSetValue to ("ファイル名\t" & (ocidFileName as text)) as text
057  (ocidOutPutString's appendString:(strSetValue))
058  (ocidOutPutString's appendString:("\n"))
059  #NSDATA
060  #エラー制御したいのでNSDataで読み込んでいます
061  set ocidOption to (refMe's NSDataReadingMappedIfSafe)
062  set listResponse to (refMe's NSData's alloc()'s initWithContentsOfFile:(ocidFilePathURL) options:(ocidOption) |error| :(reference))
063  if (item 2 of listResponse) = (missing value) then
064    log "正常処理"
065    set ocidReadData to (item 1 of listResponse)
066  else if (item 2 of listResponse) ≠ (missing value) then
067    log (item 2 of listResponse)'s code() as text
068    log (item 2 of listResponse)'s localizedDescription() as text
069    return "エラーしました"
070  end if
071  #PDFDocument
072  set ocidActivDoc to (refMe's PDFDocument's alloc()'s initWithData:(ocidReadData))
073  #ドキュメント情報
074  set ocidDocAttrDict to ocidActivDoc's documentAttributes()
075  set ocidKeyArray to ocidDocAttrDict's allKeys()
076  repeat with itemKey in ocidKeyArray
077    set ocidValue to (ocidDocAttrDict's valueForKey:(itemKey))
078    if (ocidValue's className() as text) contains "Date" then
079      set strSetValue to ((itemKey as text) & "\t" & (ocidValue as date)) as text
080      (ocidOutPutString's appendString:(strSetValue))
081      (ocidOutPutString's appendString:("\n"))
082    else
083      set strSetValue to ((itemKey as text) & "\t" & (ocidValue as text)) as text
084      (ocidOutPutString's appendString:(strSetValue))
085      (ocidOutPutString's appendString:("\n"))
086    end if
087  end repeat
088  
089  
090  #######
091  #1ページ目の値だけ先に取得しておく
092  set ocidActivPageInt to (ocidActivDoc's pageAtIndex:(0))
093  #ページの回転を取得
094  set numRotationInt to ocidActivPageInt's |rotation|()
095  #ページBOXの値を取得
096  set listMedeiaBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxMediaBox))
097  set listBleedBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxBleedBox))
098  set listTrimBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxTrimBox))
099  set listCropBoxPt to (ocidActivPageInt's boundsForBox:(refMe's kPDFDisplayBoxCropBox))
100  #PTサイズテキスト
101  set strMedeiaBoxPt to doNestListToCSV(listMedeiaBoxPt)
102  set strBleedBoxPt to doNestListToCSV(listBleedBoxPt)
103  set strTrimBoxPt to doNestListToCSV(listTrimBoxPt)
104  set strCropBoxPt to doNestListToCSV(listCropBoxPt)
105  #MMサイズテキスト
106  set strMedeiaBoxMM to doNestListToCSVPtToMm(listMedeiaBoxPt)
107  set strBleedBoxMM to doNestListToCSVPtToMm(listBleedBoxPt)
108  set strTrimBoxMM to doNestListToCSVPtToMm(listTrimBoxPt)
109  set strCropBoxMM to doNestListToCSVPtToMm(listCropBoxPt)
110  ##1ページ目の縦横サイズmmを取得
111  set AppleScript's text item delimiters to ","
112  set listDelim to every text item of strCropBoxMM
113  set AppleScript's text item delimiters to ""
114  set strWmm to item 3 of listDelim
115  set strHmm to item 4 of listDelim
116  set strSetValue to ("1ページ目のCropサイズ\n幅mm\t" & strWmm & "\n縦mm\t" & strHmm & "\n") as text
117  (ocidOutPutString's appendString:(strSetValue))
118  (ocidOutPutString's appendString:("\n"))
119  ##表の項目部分
120  set strSetValue to ("NO\tページ番号\t回転\tMedia(pt)\tBleed(pt)\tTrim(pt)\tCrop(pt)\t留意\tMedia(mm)\tBleed(mm)\tTrim(mm)\tCrop(mm)") as text
121  set strSetValue to ("NO\tページ番号\t回転\tMedia(mm)\tBleed(mm)\tTrim(mm)\tCrop(mm)\t留意\tMedia(pt)\tBleed(pt)\tTrim(pt)\tCrop(pt)") as text
122  (ocidOutPutString's appendString:(strSetValue))
123  (ocidOutPutString's appendString:("\n"))
124  ##1ページ目の値をテキストに
125  set strSetValue to ("1\t1\t" & numRotationInt & "\t") as text
126  (ocidOutPutString's appendString:(strSetValue))
127  set strSetValue to (strMedeiaBoxMM & "\t" & strBleedBoxMM & "\t" & strTrimBoxMM & "\t" & strCropBoxMM & "\t \t ") as text
128  (ocidOutPutString's appendString:(strSetValue))
129  set strSetValue to (strMedeiaBoxPt & "\t" & strBleedBoxPt & "\t" & strTrimBoxPt & "\t" & strCropBoxPt & "\n") as text
130  (ocidOutPutString's appendString:(strSetValue))
131  
132  ###########################
133  #ページ数
134  set numCntPage to ocidActivDoc's pageCount()
135  #2ページ数から繰り返し
136  repeat with itemPageNo from 1 to (numCntPage - 2) by 1
137    set boolCaution to false as boolean
138    #指定ページのページデータを取得
139    set ocidActivPage to (ocidActivDoc's pageAtIndex:(itemPageNo))
140    #回転
141    set numRotation to ocidActivPage's |rotation|()
142    set strSetValue to ((itemPageNo + 1) & "\t" & (itemPageNo + 1) & "\t" & numRotation & "\t") as text
143    (ocidOutPutString's appendString:(strSetValue))
144    ##1ページ目の値と違う場合はチェックする
145    if numRotationInt ≠ numRotation then
146      set boolCaution to true as boolean
147    end if
148    #ページのBOX値の取得
149    set listMedeiaBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxMediaBox))
150    set listBleedBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxBleedBox))
151    set listTrimBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxTrimBox))
152    set listCropBox to (ocidActivPage's boundsForBox:(refMe's kPDFDisplayBoxCropBox))
153    #1ページ目の値と違う場合はチェックする
154    if listMedeiaBoxPt ≠ listMedeiaBox then
155      set boolCaution to true as boolean
156    else if listBleedBoxPt ≠ listBleedBox then
157      set boolCaution to true as boolean
158    else if listTrimBoxPt ≠ listTrimBox then
159      set boolCaution to true as boolean
160    else if listCropBoxPt ≠ listCropBox then
161      set boolCaution to true as boolean
162    end if
163    #######
164    #PTサイズテキスト
165    set strMedeiaBox to doNestListToCSV(listMedeiaBox)
166    set strBleedBox to doNestListToCSV(listBleedBox)
167    set strTrimBox to doNestListToCSV(listTrimBox)
168    set strCropBox to doNestListToCSV(listCropBox)
169    #MMサイズテキスト
170    set strMedeiaBoxMM to doNestListToCSVPtToMm(listMedeiaBox)
171    set strBleedBoxMM to doNestListToCSVPtToMm(listBleedBox)
172    set strTrimBoxMM to doNestListToCSVPtToMm(listTrimBox)
173    set strCropBoxMM to doNestListToCSVPtToMm(listCropBox)
174    ##テキストに入れる
175    if boolCaution is true then
176      set strSetValue to (strMedeiaBoxMM & "\t" & strBleedBoxMM & "\t" & strTrimBoxMM & "\t" & strCropBoxMM & "\t\t ") as text
177    else
178      set strSetValue to (strMedeiaBoxMM & "\t" & strBleedBoxMM & "\t" & strTrimBoxMM & "\t" & strCropBoxMM & "\t \t ") as text
179    end if
180    (ocidOutPutString's appendString:(strSetValue))
181    set strSetValue to (strMedeiaBoxPt & "\t" & strBleedBoxPt & "\t" & strTrimBoxPt & "\t" & strCropBoxPt & "\n") as text
182    (ocidOutPutString's appendString:(strSetValue))
183    ##PDFページ単位の終わり
184  end repeat
185  ##PDFファイル単位の終わり
186end repeat
187
188##保存して開く
189set boolDone to doSaveString(ocidOutPutString)
190
191#####################################
192#テンポラリーにテキストデータ補保存
193#####################################
194to doSaveString(argString)
195  #保存拡張子
196  set strExtension to ("tsv") as text
197  set strBaseFileName to ("PDF全ページサイズチェック") as text
198  #保存先ディレクトリ(再起動時に削除)
199  set appFileManager to refMe's NSFileManager's defaultManager()
200  set ocidTempDirURL to appFileManager's temporaryDirectory()
201  set ocidUUID to refMe's NSUUID's alloc()'s init()
202  set ocidUUIDString to ocidUUID's UUIDString
203  set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:(true)
204  set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
205  ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
206  set listDone to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:(true) attributes:(ocidAttrDict) |error| :(reference)
207  if (item 1 of listDone) is true then
208    log "createDirectoryAtURL 正常処理"
209  else if (item 2 of listDone) ≠ (missing value) then
210    log (item 2 of listDone)'s code() as text
211    log (item 2 of listDone)'s localizedDescription() as text
212    log "createDirectoryAtURL エラーしました"
213    return false
214  end if
215  #保存ファイルパス
216  set ocidSaveBaseFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:(strBaseFileName) isDirectory:(false)
217  set ocidSaveFilePathURL to ocidSaveBaseFilePathURL's URLByAppendingPathExtension:(strExtension)
218  #保存
219  set listDone to argString's writeToURL:(ocidSaveFilePathURL) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error| :(reference)
220  if (item 1 of listDone) is true then
221    log "writeToURL 正常処理"
222    ##開く ファイルを開く場合
223    set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
224    set boolDone to appSharedWorkspace's openURL:(ocidSaveFilePathURL)
225    #開くフォルダを開く場合
226    #set appSharedWorkspace to refMe's NSWorkspace's sharedWorkspace()
227    #set boolDone to appSharedWorkspace's openURL:(ocidSaveDirPathURL)
228    return true
229  else if (item 2 of listDone) ≠ (missing value) then
230    log (item 2 of listDone)'s code() as text
231    log (item 2 of listDone)'s localizedDescription() as text
232    log "writeToURL エラーしました"
233    return false
234  end if
235  
236end doSaveString
237#####################################
238#【A】PT{{x,y},{w,h}}をPTテキストの"x,y,w,h"
239#####################################
240to doNestListToCSV(argNestList)
241  #3を実行
242  set listTmpList to doDisChildArray(argNestList)
243  #2を実行
244  set strCSV to doListToCSV(listTmpList)
245  #で戻り値
246  return strCSV
247end doNestListToCSV
248
249#####################################
250#【B】PT{{x,y},{w,h}}をMMテキストの"x,y,w,h"
251#####################################
252to doNestListToCSVPtToMm(argNestList)
253  #3を実行
254  set listTmpList to doDisChildArray(argNestList)
255  #4を実行
256  set listMM to doLitPtToListMM(listTmpList)
257  #2を実行
258  set strCSV to doListToCSV(listMM)
259  return strCSV
260end doNestListToCSVPtToMm
261
262
263#####################################
264#【2】リスト{x,y,w,h}をテキストの"x,y,w,h"に
265#####################################
266to doListToCSV(argList)
267  set ocidArray to refMe's NSArray's arrayWithArray:(argList)
268  set ocidCSV to (ocidArray's componentsJoinedByString:(","))
269  set strCSV to ocidCSV as text
270  return strCSV
271end doListToCSV
272
273#####################################
274#【3】 {{x,y},{w,h}}  を{x,y,w,h}のリストに
275#####################################
276to doDisChildArray(argList)
277  set listOutPut to {} as list
278  repeat with itemChildArray