入力フォームつきのPDFにデータ入力して別名保存するAppleScriptです。
他のGUIアプリを操作してフォーム入力するのではなく、直接PDFKitの機能を利用してフォームPDFへの記入を行なっています。
テキスト入力フォーム、チェックボックス、コンボボックスへの入力に対処してみましたが、リストボックスの項目選択はまだ行えていません。
▲Adobe AcrobatでPDFフォームサンプルをオープンしたところ
▲本ScriptでサンプルフォームPDFを処理したところ
▲Script Debugger上で表示したPDFフォーム上の各種プロパティ。フォーム欄のタイプを名前ではなく各種属性値で判定したいところ
AppleScript名:PDFフォームに入力して別名保存(テキストフィールド、チェックボックス、コンボボックス) |
— Created 2019-12-05 by Takaaki Naganoya — 2019 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "Quartz" property |NSURL| : a reference to current application’s |NSURL| property PDFDocument : a reference to current application’s PDFDocument set aHFSPath to (choose file of type {"com.adobe.pdf"} with prompt "Choose a PDF with Form") set aPOSIX to POSIX path of aHFSPath set aURL to (|NSURL|’s fileURLWithPath:aPOSIX) set aPDFdoc to PDFDocument’s alloc()’s initWithURL:aURL set pCount to aPDFdoc’s pageCount() set firstPage to (aPDFdoc’s pageAtIndex:0) set anoList to (firstPage’s annotations()) as list if anoList is not equal to {missing value} then –指定PDF中にAnotationが存在する場合のみ処理 repeat with i in anoList set aName to (i’s fieldName()) as string set adicList to i’s annotationKeyValues set aType to (adicList’s valueForKey:"/Type") as string set aSubType to (adicList’s valueForKey:"/Subtype") as string set aFormType to (adicList’s valueForKey:"/FT") as string log {aType, aSubType, aFormType} if aName ends with "Text Box" then –OK set aState to (i’s widgetStringValue()) as string if aState = "" then (i’s setWidgetStringValue:"Piyomaru") set bState to (i’s widgetStringValue()) as string end if else if aName ends with "Check Box" then –OK log {"Check Box"} set aState to (i’s buttonWidgetState()) as boolean if aState = false then (i’s setButtonWidgetState:true) set bState to (i’s buttonWidgetState()) as boolean end if else if aName ends with "Combo Box" then log {"Combo Box"} set tmpList to (i’s choices()) as list (i’s setWidgetStringValue:(contents of some item of tmpList)) set cVal to (i’s widgetStringValue()) as string log cVal else if aName ends with "List Box" then log {"List Box"} set tmpList to (i’s choices()) as list log {"tmpList", tmpList} –(i’s setWidgetStringValue:(contents of some item of tmpList)) end if end repeat end if –PDFの保存先のファイル名を入力させる(あらかじめパス文字列を作成しておいてもよい) set newFileName to POSIX path of (choose file name with prompt "Input File name to save") if newFileName does not end with ".pdf" then set newFileName to newFileName & ".pdf" end if –フォーム内容を変更したPDFを指定のパスに新規保存 set pdfRes to (aPDFdoc’s writeToFile:newFileName) as boolean |
More from my site
(Visited 363 times, 1 visits today)