Acrobat Watermark

[Acrobat]PDFにウォーターマーク・透かしを入れる(画像ファイルでもOK) 少し修正



ダウンロード - watermarkonjs.zip




AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#  
004# 透かしにしたい画像はPNGやJPEGでもOK
005# Watermarkフォルダに入れてください
006(*
007PDFの透かしの機能
008ISO 32000-1で標準化されていないので
009結果は本当に閲覧ソフト次第でマチマチです
010Acrobatで設定するのでAcroabtで閲覧するのを前提です
011
012*)
013# com.cocolog-nifty.quicktimer.icefloe
014----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
015use AppleScript version "2.8"
016use framework "Foundation"
017use framework "AppKit"
018use scripting additions
019property refMe : a reference to current application
020
021
022
023
024##################################
025#設定可能な値
026#開始ページ
027set nStart to ("0") as «class utf8»
028#透明度 0−1
029set nOpacity to ("0.2") as «class utf8»
030# true false
031#値にパーセントを使う
032set bPercentage to ("false") as «class utf8»
033#自動修正するか
034set bFixedPrint to ("false") as «class utf8»
035#ページの上に透かしを入れる
036set bOnTop to ("true") as «class utf8»
037#画面表示するか
038set bOnScreen to ("true") as «class utf8»
039#印刷時出力するか
040set bOnPrint to ("true") as «class utf8»
041
042
043##################################
044#Acrobatが起動しているか?
045tell application "System Events" to launch
046tell application "System Events"
047  set listAppTitile to (name of (every application process)) as list
048end tell
049if listAppTitile contains "AdobeAcrobat" then
050  log "Acrobat起動済み"
051else
052  set strName to (name of current application) as text
053  if strName is "osascript" then
054    tell application "Finder" to activate
055  else
056    tell current application to activate
057  end if
058  set listBotton to {"終了", "続ける"} as list
059  set recordResponse to display alert "処理中断" message "アクロバットが起動していません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
060  if (gave up of recordResponse) is true then
061    return "時間切れ:処理中止"
062  else if (button returned of recordResponse) is "" then
063    return "戻り値ボタン不正:処理中止"
064  else if (button returned of recordResponse) is (item 1 of listBotton) then
065    return "ボタン終了選択:処理終了"
066  else if (button returned of recordResponse) is (item 2 of listBotton) then
067    log "処理継続アクロバットを起動します"
068    tell application "Adobe Acrobat" to launch
069    #起動確認
070    repeat 60 times
071      tell application "Adobe Acrobat"
072        activate
073        set boolFrontMost to frontmost as boolean
074      end tell
075      if boolFrontMost is true then
076        exit repeat
077      else
078        delay 0.2
079      end if
080    end repeat
081  else
082    display alert "処理中断" message "アクロバットが起動していません" giving up after 2
083    return "アクロバットが起動していません"
084  end if
085end if
086
087##################################
088#PDFファイルを開いているか?
089tell application "Adobe Acrobat"
090  activate
091  set numCntPDFWindow to (count of PDF Window) as integer
092end tell
093if numCntPDFWindow = 0 then
094  log "PDFを開いていません"
095  set strName to (name of current application) as text
096  if strName is "osascript" then
097    tell application "Finder" to activate
098  else
099    tell current application to activate
100  end if
101  set listBotton to {"終了", "続ける"} as list
102  set recordResponse to display alert "処理中断" message "PDFを開いていません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
103  if (gave up of recordResponse) is true then
104    return "時間切れ:処理中止"
105  else if (button returned of recordResponse) is "" then
106    return "戻り値ボタン不正:処理中止"
107  else if (button returned of recordResponse) is (item 1 of listBotton) then
108    return "ボタン終了選択:処理終了"
109  else if (button returned of recordResponse) is (item 2 of listBotton) then
110    log "処理継続PDFを開きます"
111    set strName to (name of current application) as text
112    if strName is "osascript" then
113      tell application "Finder" to activate
114    else
115      tell current application to activate
116    end if
117    set appFileManager to refMe's NSFileManager's defaultManager()
118    set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
119    set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
120    set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias
121    set listUTI to {"com.adobe.pdf"}
122    set strMes to ("PDFファイルを選んでください") as text
123    set strPrompt to ("PDFファイルを選んでください") as text
124    try
125      ### ファイル選択
126      set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDefaultLocation) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
127      tell application "Adobe Acrobat"
128        activate
129        open file aliasFilePath
130      end tell
131    on error
132      log "エラーしました"
133      return "エラーしました"
134    end try
135  else
136    display alert "処理中断" message "PDFドキュメントを開いていません" giving up after 2
137    return "PDFドキュメントを開いていません"
138  end if
139else
140  log "PDFを開いているので処理継続"
141  tell application "Adobe Acrobat"
142    activate
143    tell active doc
144      #パス
145      set aliasFilePath to file alias as alias
146    end tell
147  end tell
148end if
149tell application "Adobe Acrobat"
150  tell active doc
151    #ページ数
152    set numCntAllPdfPage to (count of every page) as integer
153  end tell
154end tell
155
156
157#開いたPDFのパスとファイル名
158set strPDFFilePath to (POSIX path of aliasFilePath) as text
159set ocidPDFFilePathStr to refMe's NSString's stringWithString:(strPDFFilePath)
160set ocidPDFFilePath to ocidPDFFilePathStr's stringByStandardizingPath()
161set ocidPdfFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPDFFilePath) isDirectory:false)
162set strPdfFileName to (ocidPdfFilePathURL's lastPathComponent()) as text
163set ocidPdfFileName to ocidPdfFilePathURL's lastPathComponent()
164
165############################
166#このスクリプトのパス
167set aliasPathToMe to (path to me) as alias
168set strPathToMe to (POSIX path of aliasPathToMe) as text
169set ocidPathToMeStr to refMe's NSString's stringWithString:(strPathToMe)
170set ocidPathToMe to ocidPathToMeStr's stringByStandardizingPath()
171set ocidPathToMeURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPathToMe) isDirectory:false)
172#JSファイルの入っているフォルダ
173set ocidConteinerDirPathURL to ocidPathToMeURL's URLByDeletingLastPathComponent()
174set ocidWatermarkDirPathURL to ocidConteinerDirPathURL's URLByAppendingPathComponent:("Watermark") isDirectory:(true)
175###コンテンツを収集する 第一階層のみ
176set appFileManager to refMe's NSFileManager's defaultManager()
177set ocidPropertiesArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
178ocidPropertiesArray's addObject:(refMe's NSURLContentTypeKey)
179ocidPropertiesArray's addObject:(refMe's NSURLNameKey)
180ocidPropertiesArray's addObject:(refMe's NSURLPathKey)
181set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles)
182set ocidEmuDict to appFileManager's enumeratorAtURL:(ocidWatermarkDirPathURL) includingPropertiesForKeys:(ocidPropertiesArray) options:(ocidOption) errorHandler:(reference)
183#収集するUTI
184set listUTI to {"public.png", "com.adobe.pdf", "public.jpeg"} as list
185
186#収集したURLを分別格納用
187set ocidFilePathURLArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
188set ocidEmuFileURLArray to ocidEmuDict's allObjects()
189####URLの数だけ繰り返す
190repeat with itemURL in ocidEmuFileURLArray
191  #判定
192  set listResponse to (itemURL's getResourceValue:(reference) forKey:(refMe's NSURLContentTypeKey) |error| :(reference))
193  if (item 1 of listResponse) is (true) then
194    set ocidUTType to (item 2 of listResponse)
195    #初期値はFALSE
196    set boolUTIContain to false as boolean
197    #listUTIの数だけ繰り返し
198    repeat with itemUTI in listUTI
199      #親要素(この属性なら処理する)のUTType
200      set ocidChkUTType to (refMe's UTType's typeWithIdentifier:(itemUTI))
201      if ocidUTType = ocidChkUTType then
202        set boolUTIContain to true as boolean
203      end if
204    end repeat
205    #チェックが終わったので
206    #初期値がTrueに変わっていたらそれは画像か?PDF
207    if boolUTIContain is true then
208      (ocidFilePathURLArray's addObject:(itemURL))
209    end if
210  end if
211end repeat
212#ダイアログ用のファイル名の収集
213set ocidFileNameDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
214repeat with itemFilePathURL in ocidFilePathURLArray
215  set ocidFileName to itemFilePathURL's lastPathComponent()
216  (ocidFileNameDict's setValue:(itemFilePathURL) forKey:(ocidFileName))
217end repeat
218#キー=フィアル名を取り出してソートしておく
219set ocidJsAllKey to ocidFileNameDict's allKeys()
220set ocidSortedJsAllKey to ocidJsAllKey's sortedArrayUsingSelector:("localizedStandardCompare:")
221set listFileName to (ocidSortedJsAllKey) as list
222
223
224###ダイアログを前面に出す
225tell current application
226  set strName to name as text
227end tell
228if strName is "osascript" then
229  tell application "Finder" to activate
230else
231  tell current application to activate
232end if
233try
234  set listResponse to (choose from list listFileName with title "選んでください" with prompt "【透かしになるイメージを選んでください】" default items (item 2 of listFileName) OK button name "OK" cancel button name "キャンセル" without multiple selections allowed and empty selection allowed) as list
235on error
236  log "エラーしました"
237  return "エラーしました"
238end try
239if (item 1 of listResponse) is false then
240  return "キャンセルしました"
241end if
242
243
244###ダイアログの戻り値
245set strWatermarkFileName to (item 1 of listResponse) as text
246###レコードから取り出す
247set ocidWatermarkFilePathURL to ocidFileNameDict's valueForKey:(strWatermarkFileName)
248##拡張子
249set strExtensionName to (ocidWatermarkFilePathURL's pathExtension()) as text
250if strExtensionName is ("pdf") then
251  set strWatermarkFilePath to (ocidWatermarkFilePathURL's |path|()) as «class utf8»
252else
253  ###ディレクトリ 再起動時に自動削除
254  set appFileManager to refMe's NSFileManager's defaultManager()
255  set ocidTempDirURL to appFileManager's temporaryDirectory()
256  set ocidUUID to refMe's NSUUID's alloc()'s init()
257  set ocidUUIDString to ocidUUID's UUIDString
258  set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:true
259  set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
260  ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
261  set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error| :(reference)
262  #保存先
263  set ocidMakePdfFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:("Watermark.pdf") isDirectory:(false)
264  #NSDATAに読み込んで
265  set ocidOption to (refMe's NSDataReadingMappedIfSafe)
266  set listResponse to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidWatermarkFilePathURL) options:(ocidOption) |error| :(reference)
267  if (item 2 of listResponse) = (missing value) then
268    set ocidReadData to (item 1 of listResponse)
269  else if (item 2 of listResponse) ≠ (missing value) then
270    set strErrorNO to (item 2 of listResponse)'s code() as text
271    set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
272    refMe's NSLog("■:" & strErrorNO & strErrorMes)
273    return "エラーしました" & strErrorNO & strErrorMes
274  end if
275  #NSIMAGEに変換
276  set ocidImageData to refMe's NSImage's alloc()'s initWithData:(ocidReadData)
277  ####ドキュメントの初期化
278  #PDFにする
279  set ocidActiveDoc to refMe's PDFDocument's alloc()'s init()
280  set ocidPDFPage to refMe's PDFPage's alloc()'s initWithImage:(ocidImageData)
281  ocidActiveDoc's insertPage:(ocidPDFPage) atIndex:(0)
282  set boolDone to (ocidActiveDoc's writeToURL:(ocidMakePdfFilePathURL) withOptions:(missing value))
283  set strWatermarkFilePath to (ocidMakePdfFilePathURL's |path|()) as «class utf8»
284end if
285
286########################
287#印字位置
288set listPrintPos to {"センター", "センター45度回転", "センター45度拡大", "上左", "上中央", "上右", "下左", "下中央", "下右"} as list
289###ダイアログを前面に出す
290tell current application
291  set strName to name as text
292end tell
293if strName is "osascript" then
294  tell application "Finder" to activate
295else
296  tell current application to activate
297end if
298try
299  set listResponse to (choose from list listPrintPos with title "選んでください" with prompt "【印字位置を選んでください】" default items (item 2 of listPrintPos) OK button name "OK" cancel button name "キャンセル" without multiple selections allowed and empty selection allowed) as list
300on error
301  log "エラーしました"
302  return "エラーしました"
303end try
304if (item 1 of listResponse) is false then
305  return "キャンセルしました"
306end if
307set strPrintPos to (item 1 of listResponse) as text
308if strPrintPos is "センター" then
309  #回転
310  set nRotation to ("0") as «class utf8»
311  #ポジション
312  # left center right
313  set nHorizAlign to ("app.constants.align.center") as «class utf8»
314  # top center  bottom
315  set nVertAlign to ("app.constants.align.center") as «class utf8»
316  #位置調整 PT 左右
317  set nHorizValue to ("0") as «class utf8»
318  #位置調整 PT 上下
319  set nVertValue to ("0") as «class utf8»
320  #拡大縮小 1ーXXX
321  set nScale to ("1") as «class utf8»
322  
323else if strPrintPos is "センター45度回転" then
324  #回転
325  set nRotation to ("45") as «class utf8»
326  #ポジション
327  # left center right
328  set nHorizAlign to ("app.constants.align.center") as «class utf8»
329  # top center  bottom
330  set nVertAlign to ("app.constants.align.center") as «class utf8»
331  #位置調整 PT 左右
332  set nHorizValue to ("0") as «class utf8»
333  #位置調整 PT 上下
334  set nVertValue to ("0") as «class utf8»
335  #拡大縮小 1ーXXX
336  set nScale to ("1") as «class utf8»
337  
338else if strPrintPos is "センター45度拡大" then
339  #回転
340  set nRotation to ("45") as «class utf8»
341  #ポジション
342  # left center right
343  set nHorizAlign to ("app.constants.align.center") as «class utf8»
344  # top center  bottom
345  set nVertAlign to ("app.constants.align.center") as «class utf8»
346  #位置調整 PT 左右
347  set nHorizValue to ("0") as «class utf8»
348  #位置調整 PT 上下
349  set nVertValue to ("0") as «class utf8»
350  #拡大率計算
351  set ocidPDFDoc to refMe's PDFDocument's alloc()'s initWithURL:(ocidWatermarkFilePathURL)
352  set ocidPDFPage to ocidPDFDoc's pageAtIndex:(0)
353  set ocidBounds to ocidPDFPage's boundsForBox:(refMe's kPDFDisplayBoxCropBox)
354  set ocidW to refMe's NSRect's NSWidth(ocidBounds) as number
355  set ocidH to refMe's NSRect's NSHeight(ocidBounds) as number
356  
357  tell application "Adobe Acrobat"
358    tell active doc
359      tell first page
360        set listCropBox to crop box as list
361        set numW to item 2 of listCropBox as integer
362        set numH to item 3 of listCropBox as integer
363      end tell
364    end tell
365  end tell
366  #拡大縮小 1ーXXX
367  set nScale to ("3.6") as «class utf8»
368  
369else if strPrintPos is "上左" then
370  #回転
371  set nRotation to ("0") as «class utf8»
372  #ポジション
373  # left center right
374  set nHorizAlign to ("app.constants.align.left") as «class utf8»
375  # top center  bottom
376  set nVertAlign to ("app.constants.align.top") as «class utf8»
377  #位置調整 PT 左右
378  set nHorizValue to ("10") as «class utf8»
379  #位置調整 PT 上下
380  set nVertValue to ("-10") as «class utf8»
381  #拡大縮小 1ーXXX
382  set nScale to ("1") as «class utf8»
383  
384else if strPrintPos is "上中央" then
385  #回転
386  set nRotation to ("0") as «class utf8»
387  #ポジション
388  # left center right
389  set nHorizAlign to ("app.constants.align.center") as «class utf8»
390  # top center  bottom
391  set nVertAlign to ("app.constants.align.top") as «class utf8»
392  #位置調整 PT 左右
393  set nHorizValue to ("0") as «class utf8»
394  #位置調整 PT 上下
395  set nVertValue to ("-10") as «class utf8»
396    #拡大縮小 1ーXXX
397  set nScale to ("1") as «class utf8»
398  
399else if strPrintPos is "上右" then
400  #回転
401  set nRotation to ("0") as «class utf8»
402  #ポジション
403  # left center right
404  set nHorizAlign to ("app.constants.align.right") as «class utf8»
405  # top center  bottom
406  set nVertAlign to ("app.constants.align.top") as «class utf8»
407  #位置調整 PT 左右
408  set nHorizValue to ("-10") as «class utf8»
409  #位置調整 PT 上下
410  set nVertValue to ("-10") as «class utf8»
411  #拡大縮小 1ーXXX
412  set nScale to ("1") as «class utf8»
413  
414else if strPrintPos is "下左" then
415  #回転
416  set nRotation to ("0") as «class utf8»
417  #ポジション
418  # left center right
419  set nHorizAlign to ("app.constants.align.left") as «class utf8»
420  # top center  bottom
421  set nVertAlign to ("app.constants.align.bottom") as «class utf8»
422  #位置調整 PT 左右
423  set nHorizValue to ("10") as «class utf8»
424  #位置調整 PT 上下
425  set nVertValue to ("10") as «class utf8»
426  #拡大縮小 1ーXXX
427  set nScale to ("1") as «class utf8»
428  
429else if strPrintPos is "下中央" then
430  #回転
431  set nRotation to ("0") as «class utf8»
432  #ポジション
433  # left center right
434  set nHorizAlign to ("app.constants.align.center") as «class utf8»
435  # top center  bottom
436  set nVertAlign to ("app.constants.align.bottom") as «class utf8»
437  #位置調整 PT 左右
438  set nHorizValue to ("0") as «class utf8»
439  #位置調整 PT 上下
440  set nVertValue to ("10") as «class utf8»
441  #拡大縮小 1ーXXX
442  set nScale to ("1") as «class utf8»
443  
444else if strPrintPos is "下右" then
445  #回転
446  set nRotation to ("0") as «class utf8»
447  #ポジション
448  # left center right
449  set nHorizAlign to ("app.constants.align.right") as «class utf8»
450  # top center  bottom
451  set nVertAlign to ("app.constants.align.bottom") as «class utf8»
452  #位置調整 PT 左右
453  set nHorizValue to ("-10") as «class utf8»
454  #位置調整 PT 上下
455  set nVertValue to ("10") as «class utf8»
456  #拡大縮小 1ーXXX
457  set nScale to ("1") as «class utf8»
458  
459end if
460
461########################
462#Watermark用のPDFのパス
463set cDIPath to (strWatermarkFilePath) as «class utf8»
464#終了ページ
465set strEndPage to (numCntAllPdfPage - 1) as text
466set nEnd to strEndPage as «class utf8»
467#WatermarkになるPDFの何ページ目を透かしにする?
468set nSourcePage to ("0") as «class utf8»
469
470
471set strJs to ("this.addWatermarkFromFile({cDIPath: \"" & cDIPath & "\",nSourcePage: " & nSourcePage & ",nStart: " & nStart & ",nEnd: " & nEnd & ",nRotation: " & nRotation & ",nHorizAlign: " & nHorizAlign & ",nVertAlign: " & nVertAlign & ",nHorizValue: " & nHorizValue & ",nVertValue: " & nVertValue & ",bPercentage: " & bPercentage & ",nScale: " & nScale & ",nOpacity: " & nOpacity & ",bOnTop: " & bOnTop & ",bFixedPrint: " & bFixedPrint & ",bOnScreen: " & bOnScreen & ",bOnPrint: " & bOnPrint & "});") as «class utf8»
472
473log strJs
474tell application "Adobe Acrobat"
475  activate
476  try
477    do script strJs
478  on error
479    return "Js実行でエラーしました"
480  end try
481end tell
482
483
484##保存をJSに行わせる
485set ocidJsDirPathURL to ocidConteinerDirPathURL's URLByAppendingPathComponent:("JavaScript") isDirectory:(true)
486set ocidJsFilePathURL to ocidJsDirPathURL's URLByAppendingPathComponent:("doSaveFile.js") isDirectory:(false)
487#######
488#JSファイルをNSDATAとして読み込み
489set ocidOption to (refMe's NSDataReadingMappedIfSafe)
490set listResponse to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidJsFilePathURL) options:(ocidOption) |error| :(reference)
491if (item 2 of listResponse) = (missing value) then
492  set ocidReadData to (item 1 of listResponse)
493else if (item 2 of listResponse) ≠ (missing value) then
494  set strErrorNO to (item 2 of listResponse)'s code() as text
495  set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
496  refMe's NSLog("■:" & strErrorNO & strErrorMes)
497  return "エラーしました" & strErrorNO & strErrorMes
498end if
499#######
500#NSDATAを可変テキストに変更
501set ocidTextEnc to (refMe's NSUTF8StringEncoding)
502set ocidReadString to refMe's NSMutableString's alloc()'s initWithData:(ocidReadData) encoding:(ocidTextEnc)
503set strReadString to ocidReadString as text
504
505tell application "Adobe Acrobat"
506  activate
507  try
508    do script strReadString
509  on error
510    return "Js実行でエラーしました"
511  end try
512end tell
513
514
515
AppleScriptで生成しました

|

[Acrobat]画像をWatermark透かしとして入れる



ダウンロード - addimagewatermark.zip




AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#  
004#
005# com.cocolog-nifty.quicktimer.icefloe
006----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
007use AppleScript version "2.8"
008use framework "Foundation"
009use framework "AppKit"
010use scripting additions
011property refMe : a reference to current application
012
013
014##################################
015#Acrobatが起動しているか?
016tell application "System Events" to launch
017tell application "System Events"
018  set listAppTitile to (name of (every application process)) as list
019end tell
020if listAppTitile contains "AdobeAcrobat" then
021  log "Acrobat起動済み"
022else
023  set strName to (name of current application) as text
024  if strName is "osascript" then
025    tell application "Finder" to activate
026  else
027    tell current application to activate
028  end if
029  set listBotton to {"終了", "続ける"} as list
030  set recordResponse to display alert "処理中断" message "アクロバットが起動していません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
031  if (gave up of recordResponse) is true then
032    return "時間切れ:処理中止"
033  else if (button returned of recordResponse) is "" then
034    return "戻り値ボタン不正:処理中止"
035  else if (button returned of recordResponse) is (item 1 of listBotton) then
036    return "ボタン終了選択:処理終了"
037  else if (button returned of recordResponse) is (item 2 of listBotton) then
038    log "処理継続アクロバットを起動します"
039    tell application "Adobe Acrobat" to launch
040    #起動確認
041    repeat 60 times
042      tell application "Adobe Acrobat"
043        activate
044        set boolFrontMost to frontmost as boolean
045      end tell
046      if boolFrontMost is true then
047        exit repeat
048      else
049        delay 0.2
050      end if
051    end repeat
052  else
053    display alert "処理中断" message "アクロバットが起動していません" giving up after 2
054    return "アクロバットが起動していません"
055  end if
056end if
057
058##################################
059#PDFファイルを開いているか?
060tell application "Adobe Acrobat"
061  activate
062  set numCntPDFWindow to (count of PDF Window) as integer
063end tell
064if numCntPDFWindow = 0 then
065  log "PDFを開いていません"
066  set strName to (name of current application) as text
067  if strName is "osascript" then
068    tell application "Finder" to activate
069  else
070    tell current application to activate
071  end if
072  set listBotton to {"終了", "続ける"} as list
073  set recordResponse to display alert "処理中断" message "PDFを開いていません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
074  if (gave up of recordResponse) is true then
075    return "時間切れ:処理中止"
076  else if (button returned of recordResponse) is "" then
077    return "戻り値ボタン不正:処理中止"
078  else if (button returned of recordResponse) is (item 1 of listBotton) then
079    return "ボタン終了選択:処理終了"
080  else if (button returned of recordResponse) is (item 2 of listBotton) then
081    log "処理継続PDFを開きます"
082    set strName to (name of current application) as text
083    if strName is "osascript" then
084      tell application "Finder" to activate
085    else
086      tell current application to activate
087    end if
088    set appFileManager to refMe's NSFileManager's defaultManager()
089    set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
090    set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
091    set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias
092    set listUTI to {"com.adobe.pdf"}
093    set strMes to ("PDFファイルを選んでください") as text
094    set strPrompt to ("PDFファイルを選んでください") as text
095    try
096      ### ファイル選択
097      set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDefaultLocation) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
098      tell application "Adobe Acrobat"
099        activate
100        open file aliasFilePath
101      end tell
102    on error
103      log "エラーしました"
104      return "エラーしました"
105    end try
106  else
107    display alert "処理中断" message "PDFドキュメントを開いていません" giving up after 2
108    return "PDFドキュメントを開いていません"
109  end if
110else
111  log "PDFを開いているので処理継続"
112  tell application "Adobe Acrobat"
113    activate
114    tell active doc
115      #パス
116      set aliasFilePath to file alias as alias
117    end tell
118  end tell
119end if
120tell application "Adobe Acrobat"
121  tell active doc
122    #ページ数
123    set numCntAllPdfPage to (count of every page) as integer
124  end tell
125end tell
126
127
128#開いたPDFのパスとファイル名
129set strPDFFilePath to (POSIX path of aliasFilePath) as text
130set ocidPDFFilePathStr to refMe's NSString's stringWithString:(strPDFFilePath)
131set ocidPDFFilePath to ocidPDFFilePathStr's stringByStandardizingPath()
132set ocidPdfFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPDFFilePath) isDirectory:false)
133set strPdfFileName to (ocidPdfFilePathURL's lastPathComponent()) as text
134set ocidPdfFileName to ocidPdfFilePathURL's lastPathComponent()
135
136############################
137#このスクリプトのパス
138set aliasPathToMe to (path to me) as alias
139set strPathToMe to (POSIX path of aliasPathToMe) as text
140set ocidPathToMeStr to refMe's NSString's stringWithString:(strPathToMe)
141set ocidPathToMe to ocidPathToMeStr's stringByStandardizingPath()
142set ocidPathToMeURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPathToMe) isDirectory:false)
143#JSファイルの入っているフォルダ
144set ocidConteinerDirPathURL to ocidPathToMeURL's URLByDeletingLastPathComponent()
145set ocidJsDirPathURL to ocidConteinerDirPathURL's URLByAppendingPathComponent:("Watermark") isDirectory:(true)
146###コンテンツを収集する 第一階層のみ
147set appFileManager to refMe's NSFileManager's defaultManager()
148set ocidPropertiesArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
149ocidPropertiesArray's addObject:(refMe's NSURLIsDirectoryKey)
150ocidPropertiesArray's addObject:(refMe's NSURLNameKey)
151ocidPropertiesArray's addObject:(refMe's NSURLPathKey)
152set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles)
153set ocidEmuDict to appFileManager's enumeratorAtURL:(ocidJsDirPathURL) includingPropertiesForKeys:(ocidPropertiesArray) options:(ocidOption) errorHandler:(reference)
154#収集したURLを分別格納用
155set ocidFilePathURLArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
156set ocidEmuFileURLArray to ocidEmuDict's allObjects()
157repeat with itemURL in ocidEmuFileURLArray
158  #判定
159  set listResponse to (itemURL's getResourceValue:(reference) forKey:(refMe's NSURLIsDirectoryKey) |error| :(reference))
160  if (item 1 of listResponse) is (true) then
161    set boolIsDir to (item 2 of listResponse) as boolean
162    if boolIsDir is false then
163      (ocidFilePathURLArray's addObject:(itemURL))
164    end if
165  end if
166end repeat
167set ocidFileNameDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
168repeat with itemFilePathURL in ocidFilePathURLArray
169  set ocidFileName to itemFilePathURL's lastPathComponent()
170  (ocidFileNameDict's setValue:(itemFilePathURL) forKey:(ocidFileName))
171end repeat
172#キー=フィアル名を取り出してソートしておく
173set ocidJsAllKey to ocidFileNameDict's allKeys()
174set ocidSortedJsAllKey to ocidJsAllKey's sortedArrayUsingSelector:("localizedStandardCompare:")
175set listFileName to (ocidSortedJsAllKey) as list
176
177
178###ダイアログを前面に出す
179tell current application
180  set strName to name as text
181end tell
182if strName is "osascript" then
183  tell application "Finder" to activate
184else
185  tell current application to activate
186end if
187try
188  set listResponse to (choose from list listFileName with title "選んでください" with prompt "実行するプログラムは?選んでください\n実行後 ファイル選択ダイアログで\n【透かしになるPDFを選んでください】" default items (item 2 of listFileName) OK button name "OK" cancel button name "キャンセル" without multiple selections allowed and empty selection allowed) as list
189on error
190  log "エラーしました"
191  return "エラーしました"
192end try
193if (item 1 of listResponse) is false then
194  return "キャンセルしました"
195end if
196
197
198###ダイアログの戻り値
199set strWatermarkFileName to (item 1 of listResponse) as text
200###レコードから取り出す
201set ocidWatermarkFilePathURL to ocidFileNameDict's valueForKey:(strWatermarkFileName)
202##拡張子
203set strExtensionName to (ocidWatermarkFilePathURL's pathExtension()) as text
204if strExtensionName is ("pdf") then
205  set strWatermarkFilePath to (ocidWatermarkFilePathURL's |path|()) as «class utf8»
206else
207  ###ディレクトリ 再起動時に自動削除
208  set appFileManager to refMe's NSFileManager's defaultManager()
209  set ocidTempDirURL to appFileManager's temporaryDirectory()
210  set ocidUUID to refMe's NSUUID's alloc()'s init()
211  set ocidUUIDString to ocidUUID's UUIDString
212  set ocidSaveDirPathURL to ocidTempDirURL's URLByAppendingPathComponent:(ocidUUIDString) isDirectory:true
213  set ocidAttrDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
214  ocidAttrDict's setValue:(511) forKey:(refMe's NSFilePosixPermissions)
215  set listBoolMakeDir to appFileManager's createDirectoryAtURL:(ocidSaveDirPathURL) withIntermediateDirectories:true attributes:(ocidAttrDict) |error| :(reference)
216  #保存先
217  set ocidMakePdfFilePathURL to ocidSaveDirPathURL's URLByAppendingPathComponent:("Watermark.pdf") isDirectory:(false)
218  #NSDATAに読み込んで
219  set ocidOption to (refMe's NSDataReadingMappedIfSafe)
220  set listResponse to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidWatermarkFilePathURL) options:(ocidOption) |error| :(reference)
221  if (item 2 of listResponse) = (missing value) then
222    set ocidReadData to (item 1 of listResponse)
223  else if (item 2 of listResponse) ≠ (missing value) then
224    set strErrorNO to (item 2 of listResponse)'s code() as text
225    set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
226    refMe's NSLog("■:" & strErrorNO & strErrorMes)
227    return "エラーしました" & strErrorNO & strErrorMes
228  end if
229  #NSIMAGEに変換
230  set ocidImageData to refMe's NSImage's alloc()'s initWithData:(ocidReadData)
231  ####ドキュメントの初期化
232  #PDFにする
233  set ocidActiveDoc to refMe's PDFDocument's alloc()'s init()
234  set ocidPDFPage to refMe's PDFPage's alloc()'s initWithImage:(ocidImageData)
235  ocidActiveDoc's insertPage:(ocidPDFPage) atIndex:(0)
236  set boolDone to (ocidActiveDoc's writeToURL:(ocidMakePdfFilePathURL) withOptions:(missing value))
237  set strWatermarkFilePath to (ocidMakePdfFilePathURL's |path|()) as «class utf8»
238end if
239
240########################
241#Watermark用のPDFのパス
242set cDIPath to (strWatermarkFilePath) as «class utf8»
243#WatermarkになるPDFの何ページ目を透かしにする?
244set nSourcePage to ("0") as «class utf8»
245#開始ページ
246set nStart to ("0") as «class utf8»
247#終了ページ
248set strEndPage to (numCntAllPdfPage - 1) as text
249set nEnd to strEndPage as «class utf8»
250#回転
251set nRotation to ("0") as «class utf8»
252#ポジション
253# left center right
254set nHorizAlign to ("app.constants.align.center") as «class utf8»
255# top center  bottom
256set nVertAlign to ("app.constants.align.center") as «class utf8»
257#位置調整 PT 左右
258set nHorizValue to ("0") as «class utf8»
259#位置調整 PT 上下
260set nVertValue to ("0") as «class utf8»
261#拡大縮小 1ーXXX
262set nScale to ("1") as «class utf8»
263#透明度 0−1
264set nOpacity to ("0.2") as «class utf8»
265# true false
266#値にパーセントを使う
267set bPercentage to ("false") as «class utf8»
268#自動修正するか
269set bFixedPrint to ("false") as «class utf8»
270#ページの上に透かしを入れる
271set bOnTop to ("true") as «class utf8»
272#画面表示するか
273set bOnScreen to ("true") as «class utf8»
274#印刷時出力するか
275set bOnPrint to ("true") as «class utf8»
276
277set strJs to ("this.addWatermarkFromFile({cDIPath: \"" & cDIPath & "\",nSourcePage: " & nSourcePage & ",nStart: " & nStart & ",nEnd: " & nEnd & ",nRotation: " & nRotation & ",nHorizAlign: " & nHorizAlign & ",nVertAlign: " & nVertAlign & ",nHorizValue: " & nHorizValue & ",nVertValue: " & nVertValue & ",bPercentage: " & bPercentage & ",nScale: " & nScale & ",nOpacity: " & nOpacity & ",bOnTop: " & bOnTop & ",bFixedPrint: " & bFixedPrint & ",bOnScreen: " & bOnScreen & ",bOnPrint: " & bOnPrint & "});") as «class utf8»
278
279log strJs
280tell application "Adobe Acrobat"
281  activate
282  try
283    do script strJs
284  on error
285    return "Js実行でエラーしました"
286  end try
287end tell
AppleScriptで生成しました

|

[Acrobat] 透かしaddWatermarkFromTextを使って入れる(日本語フォント対応)全ページ同じ内容の透かし入れ



ダウンロード - addwatermarkfromtextjp.zip




AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#   文字コードのバイトスワップ
004#
005# this.addWatermarkFromTextで日本語フォントを扱う場合の
006# ユニコードの前半2バイトと後半2バイトを入れ替えた文字列を
007# 作成する補助スクリプト
008(* 例
009set strText to ("美しい日本語の透かしWATERMARK/NO Print") as «class utf8» の場合
010亜=4e9c
011あ=3042
012A=41 になるがこれをaddWatermarkFromTextすると文字バケする
013これは、文字コードの前半と後半が入れ子になるAcrobatのバグです
014これを回避するために2バイト毎逆にしたコードを作成します
015亜=4e9c→9c4e=鱎
016あ=3042→4230=䈰
017A=41→4100=䄀
018これを入力値に与える事でaddWatermarkFromTextのバグを回避できます
019addWatermarkFromTextで印字できる範囲は
020ユニコードの0xFFFFまで4桁までなので
021記号等、補助平面部分の5ー6桁のユニコードの文字は2文字に分割されるので
022利用できない
023また
024スワップされた文字は通常の文字コードの範囲外になる場合もあり
025jsファイル上で文字が表示出来ない等あるが、それは出力時には問題ない
026(ある意味よく出来たAcrobatのバグです)
027Adobe Clean等一部の特殊な文字ID設定のフォントでは回避出来ない
028スワップ後の文字列がサロゲートペアの領域になる文字は利用できない
029例: ページ サンプル (は行ま行のカタカナはダメ)
030*)
031# com.cocolog-nifty.quicktimer.icefloe
032----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
033use AppleScript version "2.8"
034use framework "Foundation"
035use framework "AppKit"
036use scripting additions
037property refMe : a reference to current application
038
039##################################
040#【テキスト項目】繰り返しテキスト 0から
041#JSに指定している場合は無視されます
042set numTextRepeat to 20 as integer
043
044
045##################################
046#【カスタマイズ項目】日付を生成しておく
047# set strDateText to doGetNextDateNo("yyyyMMdd", 1)
048# set strDateText to doGetNextDateNo("yyyy年MM月dd日", 1)
049# set strDateText to doGetNextDateNo("令和y年MM月dd日", 2)
050set strDateText to doGetNextDateNo("作成日:令和y年MM月dd日", 2)
051
052
053##################################
054#Acrobatが起動しているか?
055tell application "System Events" to launch
056tell application "System Events"
057  set listAppTitile to (name of (every application process)) as list
058end tell
059if listAppTitile contains "AdobeAcrobat" then
060  log "Acrobat起動済み"
061else
062  set strName to (name of current application) as text
063  if strName is "osascript" then
064    tell application "Finder" to activate
065  else
066    tell current application to activate
067  end if
068  set listBotton to {"終了", "続ける"} as list
069  set recordResponse to display alert "処理中断" message "アクロバットが起動していません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
070  if (gave up of recordResponse) is true then
071    return "時間切れ:処理中止"
072  else if (button returned of recordResponse) is "" then
073    return "戻り値ボタン不正:処理中止"
074  else if (button returned of recordResponse) is (item 1 of listBotton) then
075    return "ボタン終了選択:処理終了"
076  else if (button returned of recordResponse) is (item 2 of listBotton) then
077    log "処理継続アクロバットを起動します"
078    tell application "Adobe Acrobat" to launch
079    #起動確認
080    repeat 60 times
081      tell application "Adobe Acrobat"
082        activate
083        set boolFrontMost to frontmost as boolean
084      end tell
085      if boolFrontMost is true then
086        exit repeat
087      else
088        delay 0.2
089      end if
090    end repeat
091  else
092    display alert "処理中断" message "アクロバットが起動していません" giving up after 2
093    return "アクロバットが起動していません"
094  end if
095end if
096
097##################################
098#PDFファイルを開いているか?
099tell application "Adobe Acrobat"
100  activate
101  set numCntPDFWindow to (count of PDF Window) as integer
102end tell
103if numCntPDFWindow = 0 then
104  log "PDFを開いていません"
105  set strName to (name of current application) as text
106  if strName is "osascript" then
107    tell application "Finder" to activate
108  else
109    tell current application to activate
110  end if
111  set listBotton to {"終了", "続ける"} as list
112  set recordResponse to display alert "処理中断" message "PDFを開いていません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
113  if (gave up of recordResponse) is true then
114    return "時間切れ:処理中止"
115  else if (button returned of recordResponse) is "" then
116    return "戻り値ボタン不正:処理中止"
117  else if (button returned of recordResponse) is (item 1 of listBotton) then
118    return "ボタン終了選択:処理終了"
119  else if (button returned of recordResponse) is (item 2 of listBotton) then
120    log "処理継続PDFを開きます"
121    set strName to (name of current application) as text
122    if strName is "osascript" then
123      tell application "Finder" to activate
124    else
125      tell current application to activate
126    end if
127    set appFileManager to refMe's NSFileManager's defaultManager()
128    set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
129    set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
130    set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias
131    set listUTI to {"com.adobe.pdf"}
132    set strMes to ("PDFファイルを選んでください") as text
133    set strPrompt to ("PDFファイルを選んでください") as text
134    try
135      ### ファイル選択
136      set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDefaultLocation) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
137      tell application "Adobe Acrobat"
138        activate
139        open file aliasFilePath
140      end tell
141    on error
142      log "エラーしました"
143      return "エラーしました"
144    end try
145  else
146    display alert "処理中断" message "PDFドキュメントを開いていません" giving up after 2
147    return "PDFドキュメントを開いていません"
148  end if
149else
150  log "PDFを開いているので処理継続"
151  tell application "Adobe Acrobat"
152    activate
153    tell active doc
154      set aliasFilePath to file alias as alias
155    end tell
156  end tell
157end if
158####
159#開いている対象のPDFのページ数
160tell application "Adobe Acrobat"
161  activate
162  tell active doc
163    set numCntAllPdfPage to (count of every page) as integer
164  end tell
165end tell
166
167####
168#開いたPDFのパスとファイル名
169set strPDFFilePath to (POSIX path of aliasFilePath) as text
170set ocidPDFFilePathStr to refMe's NSString's stringWithString:(strPDFFilePath)
171set ocidPDFFilePath to ocidPDFFilePathStr's stringByStandardizingPath()
172set ocidPdfFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPDFFilePath) isDirectory:false)
173set strPdfFileName to (ocidPdfFilePathURL's lastPathComponent()) as text
174set ocidPdfFileName to ocidPdfFilePathURL's lastPathComponent()
175
176
177
178##################################
179#スクリプトテンプレート読み込み
180#このスクリプトのパス
181set aliasPathToMe to (path to me) as alias
182set strPathToMe to (POSIX path of aliasPathToMe) as text
183set ocidPathToMeStr to refMe's NSString's stringWithString:(strPathToMe)
184set ocidPathToMe to ocidPathToMeStr's stringByStandardizingPath()
185set ocidPathToMeURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPathToMe) isDirectory:false)
186#JSファイルの入っているフォルダ
187set ocidConteinerDirPathURL to ocidPathToMeURL's URLByDeletingLastPathComponent()
188set ocidJsDirPathURL to ocidConteinerDirPathURL's URLByAppendingPathComponent:("JavascriptFiles") isDirectory:(true)
189###コンテンツを収集する 再帰的収集
190set appFileManager to refMe's NSFileManager's defaultManager()
191set ocidPropertiesArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
192ocidPropertiesArray's addObject:(refMe's NSURLIsDirectoryKey)
193ocidPropertiesArray's addObject:(refMe's NSURLNameKey)
194ocidPropertiesArray's addObject:(refMe's NSURLPathKey)
195set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles)
196set ocidEmuDict to appFileManager's enumeratorAtURL:(ocidJsDirPathURL) includingPropertiesForKeys:(ocidPropertiesArray) options:(ocidOption) errorHandler:(reference)
197#収集したURLを分別格納用
198set ocidFilePathURLArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
199set ocidEmuFileURLArray to ocidEmuDict's allObjects()
200repeat with itemURL in ocidEmuFileURLArray
201  #判定
202  set listResponse to (itemURL's getResourceValue:(reference) forKey:(refMe's NSURLIsDirectoryKey) |error| :(reference))
203  if (item 1 of listResponse) is (true) then
204    set boolIsDir to (item 2 of listResponse) as boolean
205    if boolIsDir is false then
206      (ocidFilePathURLArray's addObject:(itemURL))
207    end if
208  end if
209end repeat
210
211(*
212###コンテンツを収集する 第一階層のみ
213set appFileManager to refMe's NSFileManager's defaultManager()
214##不可視ファイルを除く
215set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles)
216set listKey to {(refMe's NSURLPathKey), (refMe's NSURLNameKey)} as list
217##パスURLとファイル名を収集
218set ocidForKey to refMe's NSArray's alloc()'s initWithArray:(listKey)
219set listResponse to appFileManager's contentsOfDirectoryAtURL:(ocidJsDirPathURL) includingPropertiesForKeys:{ocidForKey} options:(ocidOption) |error| :(reference)
220if (item 2 of listResponse) = (missing value) then
221  log "正常処理"
222  set ocidFilePathURLArray to (item 1 of listResponse)
223else if (item 2 of listResponse) ≠ (missing value) then
224  set strErrorNO to (item 2 of listResponse)'s code() as text
225  set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
226  refMe's NSLog("■:" & strErrorNO & strErrorMes)
227  return "エラーしました" & strErrorNO & strErrorMes
228end if
229*)
230
231#レコードにファイル名とNSURLで保存しておく
232set ocidFileNameDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
233repeat with itemFilePathURL in ocidFilePathURLArray
234  set ocidFileName to itemFilePathURL's lastPathComponent()
235  (ocidFileNameDict's setValue:(itemFilePathURL) forKey:(ocidFileName))
236end repeat
237#キー=フィアル名を取り出してソートしておく
238set ocidJsAllKey to ocidFileNameDict's allKeys()
239set ocidSortedJsAllKey to ocidJsAllKey's sortedArrayUsingSelector:("localizedStandardCompare:")
240set listFileName to (ocidSortedJsAllKey) as list
241###ダイアログを前面に出す
242tell current application
243  set strName to name as text
244end tell
245if strName is "osascript" then
246  tell application "Finder" to activate
247else
248  tell current application to activate
249end if
250try
251  set listResponse to (choose from list listFileName with title "選んでください" with prompt "実行するJavascriptを選んでください" default items (item 1 of listFileName) OK button name "OK" cancel button name "キャンセル" without multiple selections allowed and empty selection allowed) as list
252on error
253  log "エラーしました"
254  return "エラーしました"
255end try
256if (item 1 of listResponse) is false then
257  return "キャンセルしました"
258end if
259###ダイアログの戻り値
260set strFileName to (item 1 of listResponse) as text
261###レコードからURLを取り出す
262set ocidJsFilePathURL to ocidFileNameDict's valueForKey:(strFileName)
263#JSファイルのファイル名
264set strJsFileName to (ocidJsFilePathURL's lastPathComponent()) as «class utf8»
265
266##################################
267#スクリプト生成
268#JSファイルをNSDATAとして読み込み
269set ocidOption to (refMe's NSDataReadingMappedIfSafe)
270set listResponse to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidJsFilePathURL) options:(ocidOption) |error| :(reference)
271if (item 2 of listResponse) = (missing value) then
272  set ocidReadData to (item 1 of listResponse)
273else if (item 2 of listResponse) ≠ (missing value) then
274  set strErrorNO to (item 2 of listResponse)'s code() as text
275  set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
276  refMe's NSLog("■:" & strErrorNO & strErrorMes)
277  return "エラーしました" & strErrorNO & strErrorMes
278end if
279#######
280#NSDATAを可変テキストに変更
281set ocidTextEnc to (refMe's NSUTF8StringEncoding)
282set ocidReadString to refMe's NSMutableString's alloc()'s initWithData:(ocidReadData) encoding:(ocidTextEnc)
283#######
284set ocidReadStringArray to ocidReadString's componentsSeparatedByString:("\n")
285set numCntArray to ocidReadStringArray's |count|()
286
287repeat with itemNo from 0 to (numCntArray - 1) by 1
288  set itemString to (ocidReadStringArray's objectAtIndex:(itemNo))
289  
290  ########繰り返し回数指定を取り出す
291  set boolMach to (itemString's containsString:("var strRepeatText =")) as boolean
292  if boolMach is true then
293    set strPattern to ("\"(.*?)\"") as «class utf8»
294    #大文字小文字判定しない
295    set ocidRegOption to (refMe's NSRegularExpressionCaseInsensitive as integer) + (refMe's NSRegularExpressionAnchorsMatchLines as integer)
296    set listRegularExpression to (refMe's NSRegularExpression's regularExpressionWithPattern:(strPattern) options:(ocidRegOption) |error| :(reference))
297    set ocidRegex to (item 1 of listRegularExpression)
298    set ocidLength to itemString's |length|()
299    set ocidTextRange to refMe's NSMakeRange(0, ocidLength)
300    set ocidMachOption to (refMe's NSMatchingReportProgress)
301    set ocidResults to (ocidRegex's firstMatchInString:(itemString) options:(ocidMachOption) range:(ocidTextRange))
302    set ocidMachRange to (ocidResults's rangeAtIndex:(1))
303    set ocidReadTextJs to (itemString's substringWithRange:(ocidMachRange))
304    set numTextRepeat to (ocidReadTextJs) as integer
305  end if
306  ########印字テキストを取り出す
307  
308  set boolMach to (itemString's containsString:("var strText =")) as boolean
309  if boolMach is true then
310    #正規表現パターン
311    set strPattern to ("\"(.*?)\"") as «class utf8»
312    #大文字小文字判定しない
313    set ocidRegOption to (refMe's NSRegularExpressionCaseInsensitive as integer) + (refMe's NSRegularExpressionAnchorsMatchLines as integer)
314    set listRegularExpression to (refMe's NSRegularExpression's regularExpressionWithPattern:(strPattern) options:(ocidRegOption) |error| :(reference))
315    set ocidRegex to (item 1 of listRegularExpression)
316    set ocidLength to itemString's |length|()
317    set ocidTextRange to refMe's NSMakeRange(0, ocidLength)
318    set ocidMachOption to (refMe's NSMatchingReportProgress)
319    set ocidResults to (ocidRegex's firstMatchInString:(itemString) options:(ocidMachOption) range:(ocidTextRange))
320    set ocidMachRange to (ocidResults's rangeAtIndex:(1))
321    set ocidReadTextJs to (itemString's substringWithRange:(ocidMachRange))
322    if (ocidReadTextJs as text) is "〓〓〓FILENAME〓〓〓" then
323      set ocidReadTextJs to ocidPdfFileName
324    else if (ocidReadTextJs as text) is "〓〓〓DATE〓〓〓" then
325      set ocidReadTextJs to strDateText
326    end if
327    
328    #python3のサブルーチンは改行を変換できないための処理
329    #戻し用のテキスト
330    set ocidJsJoindstring to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
331    #改行文字でリストに
332    set ocidJsStringArray to (ocidReadTextJs's componentsSeparatedByString:("\\n"))
333    #数数えて
334    set numCntJsArray to ocidJsStringArray's |count|()
335    #リストの数だけ繰り返し
336    repeat with itemJsLineNo from 0 to (numCntJsArray - 1) by 1
337      #リストから取り出して
338      set itemJsStringArray to (ocidJsStringArray's objectAtIndex:(itemJsLineNo))
339      #テキスト確定させてから
340      set strJsStringArray to itemJsStringArray as Unicode text
341      ###################################
342      #######サブルーチンに渡す
343      set strReplacedText to doSwapCode(strJsStringArray, numTextRepeat)
344      #戻し用テキストに追加
345      (ocidJsJoindstring's appendString:(strReplacedText))
346      #最後に改行を入れない
347      if itemJsLineNo < (numCntJsArray - 1) then
348        (ocidJsJoindstring's appendString:("\\n"))
349      end if
350    end repeat
351    #スワップエンコードが終わったテキスト
352    set strSetSrtings to ("var strText = \"" & ocidJsJoindstring & "\";") as «class utf8»
353    #リストに戻す
354    (ocidReadStringArray's replaceObjectAtIndex:(itemNo) withObject:(strSetSrtings))
355  end if
356  
357  
358end repeat
359###
360#戻りリストをテキストに
361set ocidReadString to ocidReadStringArray's componentsJoinedByString:("\n")
362
363##################################
364#スクリプト実行
365log doExecJsString(ocidReadString)
366
367
368
369
370
371
372
373
374##################################
375#スクリプト実行
376##################################
377to doExecJsString(argJsText)
378  set strReadString to argJsText as «class utf8»
379  log strReadString
380  tell application "Adobe Acrobat"
381    activate
382    try
383      do script strReadString
384    on error
385      return "Js実行でエラーしました"
386    end try
387  end tell
388  return true
389end doExecJsString
390
391
392####################################################
393# 文字のユニコードを前半と後半でスワップするサブルーチン
394# オプションでスワップ済みのコードを繰り返す指定
395#  argText=スワップするテキスト
396# argNumTextRepeat=戻す時に繰り返す数 0で繰り返し無し
397####################################################
398to doSwapCode(argText, argNumTextRepeat)
399  #受け取りテキスト
400  set strText to argText as Unicode text
401  #ここから処理
402  set numCntChar to (count of character of strText) as integer
403  #次工程に渡すテキスト
404  set strOutPutString to ("") as text
405  #文字の数だけ繰り返し
406  repeat with itemCharNo from 1 to (numCntChar) by 1
407    #文字を順番に取り出して
408    set strSetStr to (character itemCharNo of strText) as Unicode text
409    #デコードする
410    set strCommandText to ("/usr/bin/python3 -c \"print(hex(ord('" & strSetStr & "'))[2:])\"") as Unicode text
411    #log strCommandText
412    set strResponseText to (do shell script strCommandText) as text
413    #log strResponseText
414    #最初の項目前にタブを入れないように
415    if itemCharNo = 1 then
416      set strOutPutString to (strOutPutString & strResponseText & "") as text
417    else
418      set strOutPutString to (strOutPutString & "\t" & strResponseText & "") as text
419    end if
420  end repeat
421  #ユニコード番号にデコードされたテキスト
422  #log strOutPutString
423  #タブでリストにする
424  set strDelim to AppleScript's text item delimiters
425  set AppleScript's text item delimiters to "\t"
426  set listCharString to every text item of strOutPutString
427  set AppleScript's text item delimiters to strDelim
428  #次工程に渡すようのリスト
429  set listModUnicodeNo to {} as list
430  #リストの数だけ繰り返し
431  repeat with itemCharStr in listCharString
432    #ユニコードの桁数による分岐
433    set numCntUnicode to (count of character of (itemCharStr as text)) as integer
434    #アスキー2桁部分は後半に00を入れる
435    if numCntUnicode = 2 then
436      set strNewCode to ("0x" & itemCharStr & "00") as text
437      #通常の4桁コードの場合は前半2文字と後半2文字を入れ替える
438    else if numCntUnicode = 4 then
439      set strNoTF to (text 4 through 3 of itemCharStr) as text
440      set strNoFS to (text 2 through 1 of itemCharStr) as text
441      if strNoTF starts with "d" then
442        error "サロゲートペアの範囲内の文字になるため変換できません"
443      end if
444      set strNewCode to ("0x" & strNoTF & strNoFS) as text
445    end if
446    copy strNewCode to end of listModUnicodeNo
447  end repeat
448  
449  #log listModUnicodeNo
450  
451  set strOutPutText to ("") as text
452  #前後半のスワップ済みのユニコード番号から文字列を生成する
453  repeat with itemModUnicode in listModUnicodeNo
454    set strCommandText to ("/usr/bin/python3 -c \"print(chr(" & itemModUnicode & "))\"") as Unicode text
455    # log strCommandText
456    set strResponseText to (do shell script strCommandText) as text
457    # log strResponseText
458    #デコードされた文字列にしていき
459    set strOutPutText to (strOutPutText & strResponseText) as «class utf8»
460  end repeat
461  set strOutPutTextRep to (strOutPutText) as «class utf8»
462  ##リピート回数を決めてテキスト生成する時用
463  set numTextRepeat to argNumTextRepeat as integer
464  repeat numTextRepeat times
465    set strOutPutTextRep to (strOutPutTextRep & "\\n" & strOutPutText) as «class utf8»
466  end repeat
467  #ログ出力とする
468  return strOutPutTextRep
469  
470end doSwapCode
471
472
473####################################################
474# 明日の日付 doGetDateNo(argDateFormat,argCalendarNO)
475# argCalendarNO 1 NSCalendarIdentifierGregorian 西暦
476# argCalendarNO 2 NSCalendarIdentifierJapanese 和暦
477####################################################
478to doGetNextDateNo(argDateFormat, argCalendarNO)
479  ##渡された値をテキストで確定させて
480  set strDateFormat to argDateFormat as text
481  set intCalendarNO to argCalendarNO as integer
482  ###日付情報の取得
483  set ocidDate to current application's NSDate's |date|()
484  set ocidIntervalt to current application's NSDate's dateWithTimeIntervalSinceNow:(86400)
485  ###日付のフォーマットを定義(日本語)
486  set ocidFormatterJP to current application's NSDateFormatter's alloc()'s init()
487  ###和暦 西暦 カレンダー分岐
488  if intCalendarNO = 1 then
489    set ocidCalendarID to (current application's NSCalendarIdentifierGregorian)
490  else if intCalendarNO = 2 then
491    set ocidCalendarID to (current application's NSCalendarIdentifierJapanese)
492  else
493    set ocidCalendarID to (current application's NSCalendarIdentifierISO8601)
494  end if
495  set ocidCalendarJP to current application's NSCalendar's alloc()'s initWithCalendarIdentifier:(ocidCalendarID)
496  set ocidTimezoneJP to current application's NSTimeZone's alloc()'s initWithName:("Asia/Tokyo")
497  set ocidLocaleJP to current application's NSLocale's alloc()'s initWithLocaleIdentifier:("ja_JP_POSIX")
498  ###設定
499  ocidFormatterJP's setTimeZone:(ocidTimezoneJP)
500  ocidFormatterJP's setLocale:(ocidLocaleJP)
501  ocidFormatterJP's setCalendar:(ocidCalendarJP)
502  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterNoStyle)
503  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterShortStyle)
504  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterMediumStyle)
505  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterLongStyle)
506  ocidFormatterJP's setDateStyle:(current application's NSDateFormatterFullStyle)
507  ###渡された値でフォーマット定義
508  ocidFormatterJP's setDateFormat:(strDateFormat)
509  ###フォーマット適応
510  set ocidDateAndTime to ocidFormatterJP's stringFromDate:(ocidIntervalt)
511  ###テキストで戻す
512  set strDateAndTime to ocidDateAndTime
513  return strDateAndTime
514end doGetNextDateNo
515return
AppleScriptで生成しました

|

[Acrobat] 透かしaddWatermarkFromTextを使ってページ番号(ノンブル)を付与します。日本語フォント対応



ダウンロード - addpageno.zip




処理は遅いですが日本語フォントと日本語印字に一部対応しました
AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#   文字コードのバイトスワップ
004#
005# this.addWatermarkFromTextで日本語フォントを扱う場合の
006# ユニコードの前半2バイトと後半2バイトを入れ替えた文字列を
007# 作成する補助スクリプト
008(* 例
009set strText to ("美しい日本語の透かしWATERMARK/NO Print") as «class utf8» の場合
010亜=4e9c
011あ=3042
012A=41 になるがこれをaddWatermarkFromTextすると文字バケする
013これは、文字コードの前半と後半が入れ子になるAcrobatのバグです
014これを回避するために2バイト毎逆にしたコードを作成します
015亜=4e9c→9c4e=鱎
016あ=3042→4230=䈰
017A=41→4100=䄀
018これを入力値に与える事でaddWatermarkFromTextのバグを回避できます
019addWatermarkFromTextで印字できる範囲は
020ユニコードの0xFFFFまで4桁までなので
021記号等、補助平面部分の5ー6桁のユニコードの文字は2文字に分割されるので
022利用できない
023また
024スワップされた文字は通常の文字コードの範囲外になる場合もあり
025jsファイル上で文字が表示出来ない等あるが、それは出力時には問題ない
026(ある意味よく出来たAcrobatのバグです)
027Adobe Clean等一部の特殊な文字ID設定のフォントでは回避出来ないフォントもあります
028『パピプペポとマ行』スワップ後の文字コードがサロゲートペアの範囲内の文字になる文字はエラーになります
029
030JavaScriptファイルが必要です
031試す場合はダウンロードして利用してください
032https://quicktimer.cocolog-nifty.com/icefloe/files/addpageno.zip
033*)
034# com.cocolog-nifty.quicktimer.icefloe
035----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
036use AppleScript version "2.8"
037use framework "Foundation"
038use framework "AppKit"
039use scripting additions
040property refMe : a reference to current application
041
042##################################
043#【テキスト項目】繰り返しテキスト 0から
044#JSに指定している場合は無視されます
045set numTextRepeat to 20 as integer
046
047
048##################################
049#【カスタマイズ項目】日付を生成しておく
050# set strDateText to doGetNextDateNo("yyyyMMdd", 1)
051# set strDateText to doGetNextDateNo("yyyy年MM月dd日", 1)
052# set strDateText to doGetNextDateNo("令和y年MM月dd日", 2)
053set strDateText to doGetNextDateNo("作成日:令和y年MM月dd日", 2)
054
055
056##################################
057#Acrobatが起動しているか?
058tell application "System Events" to launch
059tell application "System Events"
060  set listAppTitile to (name of (every application process)) as list
061end tell
062if listAppTitile contains "AdobeAcrobat" then
063  log "Acrobat起動済み"
064else
065  set strName to (name of current application) as text
066  if strName is "osascript" then
067    tell application "Finder" to activate
068  else
069    tell current application to activate
070  end if
071  set listBotton to {"終了", "続ける"} as list
072  set recordResponse to display alert "処理中断" message "アクロバットが起動していません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
073  if (gave up of recordResponse) is true then
074    return "時間切れ:処理中止"
075  else if (button returned of recordResponse) is "" then
076    return "戻り値ボタン不正:処理中止"
077  else if (button returned of recordResponse) is (item 1 of listBotton) then
078    return "ボタン終了選択:処理終了"
079  else if (button returned of recordResponse) is (item 2 of listBotton) then
080    log "処理継続アクロバットを起動します"
081    tell application "Adobe Acrobat" to launch
082    #起動確認
083    repeat 60 times
084      tell application "Adobe Acrobat"
085        activate
086        set boolFrontMost to frontmost as boolean
087      end tell
088      if boolFrontMost is true then
089        exit repeat
090      else
091        delay 0.2
092      end if
093    end repeat
094  else
095    display alert "処理中断" message "アクロバットが起動していません" giving up after 2
096    return "アクロバットが起動していません"
097  end if
098end if
099
100##################################
101#PDFファイルを開いているか?
102tell application "Adobe Acrobat"
103  activate
104  set numCntPDFWindow to (count of PDF Window) as integer
105end tell
106if numCntPDFWindow = 0 then
107  log "PDFを開いていません"
108  set strName to (name of current application) as text
109  if strName is "osascript" then
110    tell application "Finder" to activate
111  else
112    tell current application to activate
113  end if
114  set listBotton to {"終了", "続ける"} as list
115  set recordResponse to display alert "処理中断" message "PDFを開いていません" giving up after 4 buttons listBotton default button (item 1 of listBotton) cancel button (item 1 of listBotton)
116  if (gave up of recordResponse) is true then
117    return "時間切れ:処理中止"
118  else if (button returned of recordResponse) is "" then
119    return "戻り値ボタン不正:処理中止"
120  else if (button returned of recordResponse) is (item 1 of listBotton) then
121    return "ボタン終了選択:処理終了"
122  else if (button returned of recordResponse) is (item 2 of listBotton) then
123    log "処理継続PDFを開きます"
124    set strName to (name of current application) as text
125    if strName is "osascript" then
126      tell application "Finder" to activate
127    else
128      tell current application to activate
129    end if
130    set appFileManager to refMe's NSFileManager's defaultManager()
131    set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
132    set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
133    set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias
134    set listUTI to {"com.adobe.pdf"}
135    set strMes to ("PDFファイルを選んでください") as text
136    set strPrompt to ("PDFファイルを選んでください") as text
137    try
138      ### ファイル選択
139      set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDefaultLocation) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
140      tell application "Adobe Acrobat"
141        activate
142        open file aliasFilePath
143      end tell
144    on error
145      log "エラーしました"
146      return "エラーしました"
147    end try
148  else
149    display alert "処理中断" message "PDFドキュメントを開いていません" giving up after 2
150    return "PDFドキュメントを開いていません"
151  end if
152else
153  log "PDFを開いているので処理継続"
154  tell application "Adobe Acrobat"
155    activate
156    tell active doc
157      set aliasFilePath to file alias as alias
158    end tell
159  end tell
160end if
161####
162#開いている対象のPDFのページ数
163tell application "Adobe Acrobat"
164  activate
165  tell active doc
166    set numCntAllPdfPage to (count of every page) as integer
167  end tell
168  do script ("console.show();")
169  do script ("console.clear();")
170  do script ("console.println(\"処理開始 別名保存されますのでこのままでお待ちください\");")
171end tell
172#ページ番号のゼロパディング用
173set strCntLength to (length of (numCntAllPdfPage as text)) as integer
174set numFl to (strCntLength * -1) as number
175#ゼロサプレスする場合
176set strZeroPadd to ("") as text
177repeat strCntLength times
178  set strZeroPadd to (strZeroPadd & "0") as text
179end repeat
180
181####
182#開いたPDFのパスとファイル名
183set strPDFFilePath to (POSIX path of aliasFilePath) as text
184set ocidPDFFilePathStr to refMe's NSString's stringWithString:(strPDFFilePath)
185set ocidPDFFilePath to ocidPDFFilePathStr's stringByStandardizingPath()
186set ocidPdfFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPDFFilePath) isDirectory:false)
187set strPdfFileName to (ocidPdfFilePathURL's lastPathComponent()) as text
188set ocidPdfFileName to ocidPdfFilePathURL's lastPathComponent()
189
190
191
192##################################
193#スクリプトテンプレート読み込み
194#このスクリプトのパス
195set aliasPathToMe to (path to me) as alias
196set strPathToMe to (POSIX path of aliasPathToMe) as text
197set ocidPathToMeStr to refMe's NSString's stringWithString:(strPathToMe)
198set ocidPathToMe to ocidPathToMeStr's stringByStandardizingPath()
199set ocidPathToMeURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidPathToMe) isDirectory:false)
200#JSファイルの入っているフォルダ
201set ocidConteinerDirPathURL to ocidPathToMeURL's URLByDeletingLastPathComponent()
202set ocidJsDirPathURL to ocidConteinerDirPathURL's URLByAppendingPathComponent:("JavascriptFiles") isDirectory:(true)
203###コンテンツを収集する 第一階層のみ
204set appFileManager to refMe's NSFileManager's defaultManager()
205set ocidPropertiesArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
206ocidPropertiesArray's addObject:(refMe's NSURLIsDirectoryKey)
207ocidPropertiesArray's addObject:(refMe's NSURLNameKey)
208ocidPropertiesArray's addObject:(refMe's NSURLPathKey)
209set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles)
210set ocidEmuDict to appFileManager's enumeratorAtURL:(ocidJsDirPathURL) includingPropertiesForKeys:(ocidPropertiesArray) options:(ocidOption) errorHandler:(reference)
211#収集したURLを分別格納用
212set ocidFilePathURLArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
213set ocidEmuFileURLArray to ocidEmuDict's allObjects()
214repeat with itemURL in ocidEmuFileURLArray
215  #判定
216  set listResponse to (itemURL's getResourceValue:(reference) forKey:(refMe's NSURLIsDirectoryKey) |error| :(reference))
217  if (item 1 of listResponse) is (true) then
218    set boolIsDir to (item 2 of listResponse) as boolean
219    if boolIsDir is false then
220      (ocidFilePathURLArray's addObject:(itemURL))
221    end if
222  end if
223end repeat
224
225(*
226##不可視ファイルを除く
227set ocidOption to (refMe's NSDirectoryEnumerationSkipsHiddenFiles)
228set listKey to {(refMe's NSURLPathKey), (refMe's NSURLNameKey)} as list
229##パスURLとファイル名を収集
230set ocidForKey to refMe's NSArray's alloc()'s initWithArray:(listKey)
231set listResponse to appFileManager's contentsOfDirectoryAtURL:(ocidJsDirPathURL) includingPropertiesForKeys:{ocidForKey} options:(ocidOption) |error| :(reference)
232if (item 2 of listResponse) = (missing value) then
233  log "正常処理"
234  set ocidFilePathURLArray to (item 1 of listResponse)
235else if (item 2 of listResponse) ≠ (missing value) then
236  set strErrorNO to (item 2 of listResponse)'s code() as text
237  set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
238  refMe's NSLog("■:" & strErrorNO & strErrorMes)
239  return "エラーしました" & strErrorNO & strErrorMes
240end if
241*)
242#レコードにファイル名とNSURLで保存しておく
243set ocidFileNameDict to refMe's NSMutableDictionary's alloc()'s initWithCapacity:0
244repeat with itemFilePathURL in ocidFilePathURLArray
245  set ocidFileName to itemFilePathURL's lastPathComponent()
246  (ocidFileNameDict's setValue:(itemFilePathURL) forKey:(ocidFileName))
247end repeat
248#キー=フィアル名を取り出してソートしておく
249set ocidJsAllKey to ocidFileNameDict's allKeys()
250set ocidSortedJsAllKey to ocidJsAllKey's sortedArrayUsingSelector:("localizedStandardCompare:")
251set listFileName to (ocidSortedJsAllKey) as list
252###ダイアログを前面に出す
253tell current application
254  set strName to name as text
255end tell
256if strName is "osascript" then
257  tell application "Finder" to activate
258else
259  tell current application to activate
260end if
261try
262  set listResponse to (choose from list listFileName with title "選んでください" with prompt "実行するプログラムは?選んでください\n実行後 ファイル選択ダイアログで\nマージするPDFを選んでください" default items (item 1 of listFileName) OK button name "OK" cancel button name "キャンセル" without multiple selections allowed and empty selection allowed) as list
263on error
264  log "エラーしました"
265  return "エラーしました"
266end try
267if (item 1 of listResponse) is false then
268  return "キャンセルしました"
269end if
270###ダイアログの戻り値
271set strFileName to (item 1 of listResponse) as text
272###レコードからURLを取り出す
273set ocidJsFilePathURL to ocidFileNameDict's valueForKey:(strFileName)
274#JSファイルのファイル名
275set strJsFileName to (ocidJsFilePathURL's lastPathComponent()) as «class utf8»
276
277##################################
278#スクリプト生成
279#JSファイルをNSDATAとして読み込み
280set ocidOption to (refMe's NSDataReadingMappedIfSafe)
281set listResponse to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidJsFilePathURL) options:(ocidOption) |error| :(reference)
282if (item 2 of listResponse) = (missing value) then
283  set ocidReadData to (item 1 of listResponse)
284else if (item 2 of listResponse) ≠ (missing value) then
285  set strErrorNO to (item 2 of listResponse)'s code() as text
286  set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
287  refMe's NSLog("■:" & strErrorNO & strErrorMes)
288  return "エラーしました" & strErrorNO & strErrorMes
289end if
290#######
291#NSDATAを可変テキストに変更
292set ocidTextEnc to (refMe's NSUTF8StringEncoding)
293set ocidReadString to refMe's NSMutableString's alloc()'s initWithData:(ocidReadData) encoding:(ocidTextEnc)
294#####################
295#置換するArray番号を取得する
296#読むこんだJSファイルを改行でリストにして
297set ocidReadStringArray to ocidReadString's componentsSeparatedByString:("\n")
298#リストの数
299set numCntArray to ocidReadStringArray's |count|()
300####
301#判定用の番号の初期化
302set numTextLineNo to 0 as integer
303set numStartPageNo to 0 as integer
304set numEndPageNo to 0 as integer
305
306#リストの数だけ繰り返し
307repeat with itemNo from 0 to (numCntArray - 1) by 1
308  #行テキストを取り出して
309  set itemString to (ocidReadStringArray's objectAtIndex:(itemNo))
310  #マッチを確認 テキスト
311  set boolMachA to (itemString's containsString:("〓〓〓PAGENO〓〓〓")) as boolean
312  if boolMachA is true then
313    set numTextLineNo to itemNo as integer
314  end if
315  #マッチを確認 スタート番号
316  set boolMachB to (itemString's containsString:("〓〓〓START〓〓〓")) as boolean
317  if boolMachB is true then
318    set numStartPageNo to itemNo as integer
319  end if
320  #マッチを確認 スタート番号
321  set boolMachC to (itemString's containsString:("〓〓〓END〓〓〓")) as boolean
322  if boolMachC is true then
323    set numEndPageNo to itemNo as integer
324  end if
325  #マッチを確認 欧文フォント用
326  set boolMachC to (itemString's containsString:("〓〓〓欧文フォント用〓〓〓")) as boolean
327  if boolMachC is true then
328    set ocidExecReadStringJs to (ocidReadStringArray's componentsJoinedByString:("\n"))
329    #スクリプト実行
330    log doExecJsString(ocidReadString)
331    log doJobEnd()
332    return "終了"
333  end if
334  
335end repeat
336
337#####################
338#ページ毎に処理する
339repeat with numPageNO from 0 to (numCntAllPdfPage - 1) by 1
340  #ページ番号 印字用1足した値のテキスト
341  set strPrintPageNO to (numPageNO + 1) as text
342  tell application "Adobe Acrobat"
343    activate
344    do script ("console.println(\"処理中: " & strPrintPageNO & " \" );")
345  end tell
346  #ゼロパディング 不要な場合はコメントアウト
347  set strSetZeroPadd to (strZeroPadd & (strPrintPageNO as text)) as text
348  set strPrintSetPageNO to (text numFl through -1 of strSetZeroPadd) as text
349  ###############################
350  #テキストにセットする文字列を作成する
351  set strSetPageText to ""
352  set strPrefix to ("- ") as text
353  set strSuffix to (" / " & numCntAllPdfPage & " -") as text
354  set strSetPageText to (strPrefix & strPrintSetPageNO & strSuffix) as text
355  #サブルーチンに渡す
356  set strReplacedText to doSwapCode(strSetPageText, 0)
357  set strRePlace to ("var strText = \"" & strReplacedText & "\";") as text
358  set ocidRePlace to (refMe's NSString's stringWithString:(strRePlace))
359  (ocidReadStringArray's replaceObjectAtIndex:(numTextLineNo) withObject:(ocidRePlace))
360  #サブルーチンに渡す
361  set strRePlaceS to ("var strStart = " & numPageNO & ";") as text
362  set ocidRePlaceS to (refMe's NSString's stringWithString:(strRePlaceS))
363  (ocidReadStringArray's replaceObjectAtIndex:(numStartPageNo) withObject:(ocidRePlaceS))
364  #サブルーチンに渡す
365  set strRePlaceE to ("var strEnd = " & numPageNO & ";") as text
366  set ocidRePlaceE to (refMe's NSString's stringWithString:(strRePlaceE))
367  (ocidReadStringArray's replaceObjectAtIndex:(numEndPageNo) withObject:(ocidRePlaceE))
368  ##################################
369  #戻りリストをテキストに
370  set ocidExecReadStringJs to (ocidReadStringArray's componentsJoinedByString:("\n"))
371  #スクリプト実行
372  log doExecJsString(ocidExecReadStringJs)
373end repeat
374
375#####################
376#処理が終わったら別名保存
377set ocidJsSaveFilePathURL to ocidConteinerDirPathURL's URLByAppendingPathComponent:("Parts/doSaveFile.js") isDirectory:(true)
378#JSファイルをNSDATAとして読み込み
379set ocidOption to (refMe's NSDataReadingMappedIfSafe)
380set listResponse to refMe's NSData's alloc()'s initWithContentsOfURL:(ocidJsSaveFilePathURL) options:(ocidOption) |error| :(reference)
381if (item 2 of listResponse) = (missing value) then
382  set ocidReadData to (item 1 of listResponse)
383else if (item 2 of listResponse) ≠ (missing value) then
384  set strErrorNO to (item 2 of listResponse)'s code() as text
385  set strErrorMes to (item 2 of listResponse)'s localizedDescription() as text
386  refMe's NSLog("■:" & strErrorNO & strErrorMes)
387  return "エラーNSDATA" & strErrorNO & strErrorMes
388end if
389#######
390#NSDATAを可変テキストに変更
391set ocidTextEnc to (refMe's NSUTF8StringEncoding)
392set ocidReadString to refMe's NSMutableString's alloc()'s initWithData:(ocidReadData) encoding:(ocidTextEnc)
393#######
394#スクリプト実行
395log doExecJsString(ocidReadString)
396#ジョブ終了
397log doJobEnd()
398return
399
400
401##################################
402#ジョブ終了
403##################################
404
405to doJobEnd()
406  tell application "Adobe Acrobat"
407    activate
408    do script ("console.println(\"処理終了\");")
409  end tell
410  #4秒まって
411  delay 4
412  #コンソール終了
413  tell application "Adobe Acrobat"
414    do script ("console.clear();")
415    do script ("console.hide();")
416  end tell
417  return "ジョブ終了"
418end doJobEnd
419
420##################################
421#スクリプト実行
422##################################
423to doExecJsString(argJsText)
424  set strReadString to argJsText as «class utf8»
425  log strReadString
426  tell application "Adobe Acrobat"
427    activate
428    try
429      do script strReadString
430    on error
431      return "Js実行でエラーしました"
432    end try
433  end tell
434  return true
435end doExecJsString
436
437
438####################################################
439# 文字のユニコードを前半と後半でスワップするサブルーチン
440# オプションでスワップ済みのコードを繰り返す指定
441#  argText=スワップするテキスト
442# argNumTextRepeat=戻す時に繰り返す数 0で繰り返し無し
443####################################################
444to doSwapCode(argText, argNumTextRepeat)
445  #受け取りテキスト
446  set strText to argText as Unicode text
447  #ここから処理
448  set numCntChar to (count of character of strText) as integer
449  #次工程に渡すテキスト
450  set strOutPutString to ("") as text
451  #文字の数だけ繰り返し
452  repeat with itemCharNo from 1 to (numCntChar) by 1
453    #文字を順番に取り出して
454    set strSetStr to (character itemCharNo of strText) as Unicode text
455    #デコードする
456    set strCommandText to ("/usr/bin/python3 -c \"print(hex(ord('" & strSetStr & "'))[2:])\"") as Unicode text
457    #log strCommandText
458    set strResponseText to (do shell script strCommandText) as text
459    #log strResponseText
460    #最初の項目前にタブを入れないように
461    if itemCharNo = 1 then
462      set strOutPutString to (strOutPutString & strResponseText & "") as text
463    else
464      set strOutPutString to (strOutPutString & "\t" & strResponseText & "") as text
465    end if
466  end repeat
467  #ユニコード番号にデコードされたテキスト
468  #log strOutPutString
469  #タブでリストにする
470  set strDelim to AppleScript's text item delimiters
471  set AppleScript's text item delimiters to "\t"
472  set listCharString to every text item of strOutPutString
473  set AppleScript's text item delimiters to strDelim
474  #次工程に渡すようのリスト
475  set listModUnicodeNo to {} as list
476  #リストの数だけ繰り返し
477  repeat with itemCharStr in listCharString
478    #ユニコードの桁数による分岐
479    set numCntUnicode to (count of character of (itemCharStr as text)) as integer
480    #アスキー2桁部分は後半に00を入れる
481    if numCntUnicode = 2 then
482      set strNewCode to ("0x" & itemCharStr & "00") as text
483      #通常の4桁コードの場合は前半2文字と後半2文字を入れ替える
484    else if numCntUnicode = 4 then
485      set strNoTF to (text 4 through 3 of itemCharStr) as text
486      set strNoFS to (text 2 through 1 of itemCharStr) as text
487      if strNoTF starts with "d" then
488        error "サロゲートペアの範囲内の文字になるため変換できません"
489      end if
490      set strNewCode to ("0x" & strNoTF & strNoFS) as text
491    end if
492    copy strNewCode to end of listModUnicodeNo
493  end repeat
494  
495  #log listModUnicodeNo
496  
497  set strOutPutText to ("") as text
498  #前後半のスワップ済みのユニコード番号から文字列を生成する
499  repeat with itemModUnicode in listModUnicodeNo
500    set strCommandText to ("/usr/bin/python3 -c \"print(chr(" & itemModUnicode & "))\"") as Unicode text
501    # log strCommandText
502    set strResponseText to (do shell script strCommandText) as text
503    # log strResponseText
504    #デコードされた文字列にしていき
505    set strOutPutText to (strOutPutText & strResponseText) as «class utf8»
506  end repeat
507  set strOutPutTextRep to (strOutPutText) as «class utf8»
508  ##リピート回数を決めてテキスト生成する時用
509  set numTextRepeat to argNumTextRepeat as integer
510  repeat numTextRepeat times
511    set strOutPutTextRep to (strOutPutTextRep & "\\n" & strOutPutText) as «class utf8»
512  end repeat
513  #ログ出力とする
514  return strOutPutTextRep
515  
516end doSwapCode
517
518
519####################################################
520# 明日の日付 doGetDateNo(argDateFormat,argCalendarNO)
521# argCalendarNO 1 NSCalendarIdentifierGregorian 西暦
522# argCalendarNO 2 NSCalendarIdentifierJapanese 和暦
523####################################################
524to doGetNextDateNo(argDateFormat, argCalendarNO)
525  ##渡された値をテキストで確定させて
526  set strDateFormat to argDateFormat as text
527  set intCalendarNO to argCalendarNO as integer
528  ###日付情報の取得
529  set ocidDate to current application's NSDate's |date|()
530  set ocidIntervalt to current application's NSDate's dateWithTimeIntervalSinceNow:(86400)
531  ###日付のフォーマットを定義(日本語)
532  set ocidFormatterJP to current application's NSDateFormatter's alloc()'s init()
533  ###和暦 西暦 カレンダー分岐
534  if intCalendarNO = 1 then
535    set ocidCalendarID to (current application's NSCalendarIdentifierGregorian)
536  else if intCalendarNO = 2 then
537    set ocidCalendarID to (current application's NSCalendarIdentifierJapanese)
538  else
539    set ocidCalendarID to (current application's NSCalendarIdentifierISO8601)
540  end if
541  set ocidCalendarJP to current application's NSCalendar's alloc()'s initWithCalendarIdentifier:(ocidCalendarID)
542  set ocidTimezoneJP to current application's NSTimeZone's alloc()'s initWithName:("Asia/Tokyo")
543  set ocidLocaleJP to current application's NSLocale's alloc()'s initWithLocaleIdentifier:("ja_JP_POSIX")
544  ###設定
545  ocidFormatterJP's setTimeZone:(ocidTimezoneJP)
546  ocidFormatterJP's setLocale:(ocidLocaleJP)
547  ocidFormatterJP's setCalendar:(ocidCalendarJP)
548  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterNoStyle)
549  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterShortStyle)
550  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterMediumStyle)
551  # ocidFormatterJP's setDateStyle:(current application's NSDateFormatterLongStyle)
552  ocidFormatterJP's setDateStyle:(current application's NSDateFormatterFullStyle)
553  ###渡された値でフォーマット定義
554  ocidFormatterJP's setDateFormat:(strDateFormat)
555  ###フォーマット適応
556  set ocidDateAndTime to ocidFormatterJP's stringFromDate:(ocidIntervalt)
557  ###テキストで戻す
558  set strDateAndTime to ocidDateAndTime
559  return strDateAndTime
560end doGetNextDateNo
561return
AppleScriptで生成しました

|

[Acrobat]テキスト形式のウォーターマーク(透かし)文字入れ時の文字化け対策スクリプト(Acrobatのバグの回避方法)



Python を利用しますので
Xcodeが必要です
詳しくはこちらを見て準備してください
[Python] macOSでPython利用時の基本セットアップ(ユーザー環境)
https://quicktimer.cocolog-nifty.com/icefloe/2024/09/post-84bace.html


AppleScript サンプルコード

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

AppleScript サンプルソース(参考)
行番号ソース
001#!/usr/bin/env osascript
002----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
003#   文字コードのバイトスワップ
004#
005# this.addWatermarkFromTextで日本語フォントを扱う場合の
006# ユニコードの前半2バイトと後半2バイトを入れ替えた文字列を
007# 作成する補助スクリプト
008(* 例
009set strText to ("美しい日本語の透かしWATERMARK/NO Print") as «class utf8» の場合
010亜=4e9c
011あ=3042
012A=41 になるがこれをaddWatermarkFromTextすると文字バケする
013これは、文字コードの前半と後半が入れ子になるAcrobatのバグです
014これを回避するために2バイト毎逆にしたコードを作成します
015亜=4e9c→9c4e=鱎
016あ=3042→4230=䈰
017A=41→4100=䄀
018これを入力値に与える事でaddWatermarkFromTextのバグを回避できます
019addWatermarkFromTextで印字できる範囲は
020ユニコードの0xFFFFまで4桁までなので
021記号等、補助平面部分の5ー6桁のユニコードの文字は2文字に分割されるので
022利用できない
023また
024スワップされた文字は通常の文字コードの範囲外になる場合もあり
025jsファイル上で文字が表示出来ない等あるが、それは出力時には問題ない
026(ある意味よく出来たAcrobatのバグです)
027*)
028# com.cocolog-nifty.quicktimer.icefloe
029----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
030use AppleScript version "2.8"
031use framework "Foundation"
032use framework "AppKit"
033use scripting additions
034
035
036set strText to ("美しい日本語の透かしWATERMARK/NO Print/印刷禁止/") as Unicode text
037
038#ループ回数となる文字数
039set numCntChar to (count of character of strText) as integer
040#次工程に渡すテキスト
041set strOutPutString to ("") as text
042#文字の数だけ繰り返し
043repeat with itemCharNo from 1 to (numCntChar) by 1
044  #文字を順番に取り出して
045  set strSetStr to (character itemCharNo of strText) as Unicode text
046  #デコードする
047  set strCommandText to ("/usr/bin/python3 -c \"print(hex(ord('" & strSetStr & "'))[2:])\"") as Unicode text
048  #log strCommandText
049  set strResponseText to (do shell script strCommandText) as text
050  #log strResponseText
051  #最初の項目前にタブを入れないように
052  if itemCharNo = 1 then
053    set strOutPutString to (strOutPutString & strResponseText & "") as text
054  else
055