« そろそろM1買ってもいいかも | トップページ | 【Acrobat】PDFフォームの値を取得して集計まで(その3) »

【Acrobat】PDFフォームの値を取得して集計まで(その4)

【Acrobat】PDFフォームの値を取得して集計まで(その1)
https://force4u.cocolog-nifty.com/skywalker/2021/09/post-ff0078.html
ファイルのオープンとクローズの部分を説明しました
-----------------------------------------------------------
【Acrobat】PDFフォームの値を取得して集計まで(その2)
https://force4u.cocolog-nifty.com/skywalker/2021/09/post-c64e63.html
フォーム名の取得部分を説明しました
-----------------------------------------------------------
【Acrobat】PDFフォームの値を取得して集計まで(その3)
https://force4u.cocolog-nifty.com/skywalker/2021/09/post-d081da.html
各フォーム名のフォームの値の取得を説明しました
-----------------------------------------------------------
あとは取り出したデータを整形してテキストファイルにするだけです。
タブ区切りテキストにします
(エクセルにペーストするのに一番便利だからね)

Screencapture_20210904_15_53_36
-----------------------------------------------------------

(*
複数の入力済みフォームPDFから
値を取り出す
20210904 V1 初回作成

フォームからデータを取り出して
タブ区切りテキストにします



*)

on run
set theDefLoc to (path to desktop from user domain) as alias
set theFileType to "public.pdf,com.adobe.pdf" as text
set AppleScript's text item delimiters to {","}
set theFileTypeList to every text item of theFileType
set theWithPrompt to theFileType & "PDF\nをえらんでください\n"
set theWithPromptMes to "PDFフォームファイルを選んでください"
open (choose file default location theDefLoc ¬
with prompt theWithPrompt & theWithPromptMes ¬
of type theFileTypeList ¬
invisibles true ¬
with multiple selections allowed without showing package contents)
end run


on open objOpenFile
--////////////////テキストエディットを起動しておきます
tell application "TextEdit" to activate
--////////////////アクロバットを起動しておく
tell application "Adobe Acrobat" to activate
--////////////////アクロバットが完全に起動するのを待つ(環境依存で任意の値を指定してください)
delay 5
--////////////////各値初期化
set theFldNUM to "" as text
set theTitleText to "" as text
set theValeText to "" as text
set theTitleChk to 0 as integer
set theFileCnt to 0 as integer
--////////////////オープンした数だけ繰り返し
repeat with objFiles in objOpenFile
--////////////////フィールド数は0から
set theFldCntNUM to 0 as integer
--////////////////開くファイルのUNIXパスを取得
set theTemFilePath to POSIX path of objFiles as text
tell application "Adobe Acrobat"
activate
--////////////////コンソール見たい時用
---do script "console.show();"
---do script "console.clear();"
--////////////////ファイルを開く
do script "app.openDoc(\"" & theTemFilePath & "\");"
delay 0.5
--////////////////フォームの名前を取得する
--////////////////最初の1回だけフォームの名前を取得する
if theTitleChk = 0 then
--////////////////フォームの数を数える
do script "var theFildNo = this.numFields"
--////////////////AppleScript用にテキストにして戻す
set theFldNUM to (do script "theFildNo") as text
--////////////////フォームの数だけ繰り返し
repeat theFldNUM times
--////////////////順番にフォーム名を取得
do script "var theFildTitle = this.getNthFieldName(" & theFldCntNUM & ")"
--////////////////AppleScript用にテキストにして戻す
set theFildTitleText to (do script "theFildTitle") as text
--////////////////タブ区切りテキストにして整形
set theTitleText to ("" & theTitleText & theFildTitleText & "\t") as text
--////////////////カウントアップ
set theFldCntNUM to (theFldCntNUM + 1)
end repeat
end if
--////////////////次からフォーム名は取得しないためにカウントアップ
set theTitleChk to (theTitleChk + 1) as integer
--////////////////フォームの値を取得する
--////////////////繰り返し値の初期化
set theFldCntNUM to 1 as integer
set AppleScript's text item delimiters to {"\t"}
--////////////////フォーム名をリストにする
set listTitleText to (every text item of theTitleText) as list
set AppleScript's text item delimiters to {""}
--////////////////最初の列数のカウントアップ
set theFileCnt to (theFileCnt + 1) as integer
--///////////////最初の1列目をNoをいれてタブで区切っておく
set theValeText to ("" & theValeText & theFileCnt & "\t") as text
--///////////////フォーム数だけ繰り返す
repeat theFldNUM times
--///////////////順番にリストにしたフォーム名を取得して
set theFormValue to (item theFldCntNUM of listTitleText) as text
--///////////////フォーム名の値を取得する
do script "var theFormValeText = this.getField(\"" & theFormValue & "\").value;"
--////////////////AppleScript用にテキストにして戻す
set theFildValeText to (do script "theFormValeText") as text
--////////////////タブ区切りテキストにして整形
set theValeText to ("" & theValeText & theFildValeText & "\t") as text
--////////////////カウントアップ
set theFldCntNUM to (theFldCntNUM + 1)
end repeat
--////////////////1つのファイルの値の取得が終わったら改行する
set theValeText to ("" & theValeText & "\n") as text
---////////////////ファイルを閉じる
do script "closeDoc();"
end tell
end repeat
--////////////////フォーム名のタイトル部を整形
set theTitleText to ("No\t" & theTitleText & "\n") as text
--////////////////取得したフォームの値と合わせて整形
set theValeText to (theTitleText & theValeText) as text
---////////////////出来上がった値をテキストファイルにする
set theDesktopUnixPath to POSIX path of (path to desktop folder from user domain) as text
set aliasDesktop to (path to desktop folder from user domain as alias) as text
set theSaveFile to (aliasDesktop & "フォームデータ.txt") as text
set theSaveFileName to ("フォームデータ.txt") as text
---////////////////先に空のテキストファイルを作っておく
tell application "Finder"
set theFolder to ((aliasDesktop) as alias)
try
make new file at aliasDesktop with properties {name:(theSaveFileName)}
end try
set theOutPutFile to (((aliasDesktop) as text) & ((theSaveFileName) as text)) as alias
end tell
---////////////////空のテキストファイルを開いて値を流し込む
tell application "TextEdit"
open theOutPutFile
tell document 1
set its text to theValeText
end tell
save document 1
end tell
end open

|

« そろそろM1買ってもいいかも | トップページ | 【Acrobat】PDFフォームの値を取得して集計まで(その3) »

AcrobatForm」カテゴリの記事