AcrobatForm

【Acrobat】Acrobatフォームでデータ印字(はがき宛名)(ちょっとだけ修正)

【Acrobat】Acrobatフォームでデータ印字(はがき宛名)
https://force4u.cocolog-nifty.com/skywalker/cat75941294/index.html
こらちらの記事の
一部修正

ダウンロード - テキストデータからはがきPDF.zip

|

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

【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
各フォーム名のフォームの値の取得を説明しました
-----------------------------------------------------------
【Acrobat】PDFフォームの値を取得して集計まで(その4)
スクリプトの全体
-----------------------------------------------------------
サンプルデータとスクリプトダウンロード

ダウンロード - getformvalue.zip


-----------------------------------------------------------

|

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

【Acrobat】Acrobatフォームでデータ印字(その1)
https://force4u.cocolog-nifty.com/skywalker/cat75986021/index.html
この記事で
タブ区切りテキストのデータから
フォームPDFをデータの件数分作成するってのをやりました。
------------------------------------------------------------------------
その発展形で
【Acrobat】Acrobatフォームでデータ印字(はがき宛名)
https://force4u.cocolog-nifty.com/skywalker/2021/08/post-ba955e.html

やりました
------------------------------------------------------------------------
今度は、その逆で
入力済みフォームPDFから各フォームの値を取得して
タブ区切りテキストにします。
------------------------------------------------------------------------
Acrobatフォームでデータ印字とほぼ同じ処理を
逆にやるだけです。
AppleScriptのいいところと
JavaScriptのいいところ取りです。
例えば
ファイルのオープンとクローズ
ファイルの選択はUIが使えるのでやっぱりAppleScript
Acrobat内の処理、ファイルのオープンとクローズはJavaScript

行った感じで処理しています。

(*
サンプル
PDF
開いて閉じるだけの部分



*)

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 "Adobe Acrobat" to activate
repeat with objFiles in objOpenFile
set theTemFilePath to POSIX path of objFiles as text
tell application "Adobe Acrobat"
activate
--////////////////ファイルを開く
do script "app.openDoc(\"" & theTemFilePath & "\");"

---////////////////ファイルを閉じる
do script "closeDoc();"
end tell
end repeat

end open


続く

|

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

フォームの『名前』を取得します。
フォームの値を取得するのに必要なのが

this.getField(フォームの名前).value;


なりますので
フォームの名前を取得する必要があります
ここで処理するのは
1:何個フォームがあるか?
2:各フォームの名前を取得する となります

Screencapture-20210904-163847
------------------------------------------------------------------

(*
サンプル
PDFフォームの名前を取得する部分



*)

set theFldNUM to "" as text
set theFldCntNUM to 0 as integer
set theTitleText to "" as text

tell application "Adobe Acrobat"
----activate
--////////////////テンプレートファイルを開く
---do script "app.openDoc(\"" & theTemFilePath & "\");"
--////////////////開いたファイルを処理
tell window 1
do script "console.show();"
do script "console.clear();"
do script "var theFildNo = this.numFields"
set theFldNUM to (do script "theFildNo") as text

repeat theFldNUM times
do script "var theFildTitle = this.getNthFieldName(" & theFldCntNUM & ")"
set theFildTitleText to (do script "theFildTitle") as text
set theTitleText to ("" & theTitleText & theFildTitleText & "\t") as text
set theFldCntNUM to (theFldCntNUM + 1)
end repeat

set theTitleText to ("" & theTitleText & "") as text

log theTitleText

---////////////////ファイルを閉じる
----do script "closeDoc();"
end tell
end tell

|

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

【Acrobat】PDFフォームの値を取得して集計まで(その2)
https://force4u.cocolog-nifty.com/skywalker/2021/09/post-c64e63.html
こちらで
『フォームの名前』は取得しました
この時に『フォームの数』も取得していますので
ひとつずつ
this.getField(フォームの名前).value; を繰り返します。

Screencapture-20210904-164839


-----------------------------------------------------------------

(*
サンプル
フォームの名前を取得して
から
各フォームの名前の値を取得します。



*)




set theFldNUM to "" as text
set theFldCntNUM to 0 as integer
set theTitleText to "" as text

tell application "Adobe Acrobat"
----activate
--////////////////テンプレートファイルを開く
---do script "app.openDoc(\"" & theTemFilePath & "\");"
--////////////////開いたファイルを処理
tell window 1
do script "console.show();"
do script "console.clear();"
do script "var theFildNo = this.numFields"
set theFldNUM to (do script "theFildNo") as text

repeat theFldNUM times
do script "var theFildTitle = this.getNthFieldName(" & theFldCntNUM & ")"
set theFildTitleText to (do script "theFildTitle") as text
set theTitleText to ("" & theTitleText & theFildTitleText & "\t") as text
set theFldCntNUM to (theFldCntNUM + 1)
end repeat

set theTitleText to ("" & theTitleText & "\n") as text



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 {""}

repeat theFldNUM times
set theFormValue to (item theFldCntNUM of listTitleText) as text
log theFormValue
do script "var theFormValeText = this.getField(\"" & theFormValue & "\").value;"
set theFildValeTText to (do script "theFormValeText") as text
set theTitleText to ("" & theTitleText & theFildValeTText & "\t") as text

set theFldCntNUM to (theFldCntNUM + 1)
end repeat

set theTitleText to ("" & theTitleText & "\n") as text


theTitleText

---////////////////ファイルを閉じる
----do script "closeDoc();"
end tell
end tell

|

【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

|

[Acrobat]対象のPDFをAcrobatで開くようにさせる(その4:文書のアクション)

[Acrobat]対象のPDFをAcrobatで開くようにさせる(その1)
[Acrobat]対象のPDFをAcrobatで開くようにさせる(その2:フォームの全画面配置)
[Acrobat]対象のPDFをAcrobatで開くようにさせる(その3:レイヤの制御)

要点は『コンテンツを隠す』事で、
特定の環境での閲覧を制限する事が出来る…を4回にわけましたが
Acrobat以外で開いた時は表示させない
逆に
デスクトップに保存してAcrobatで表示させたくない
なんて時の参考になるかな?と

レイヤでの制御で
レイヤを『表示』『非表示』を切り替える制御でした。
あとはその2でやった『起動時の設定』と『環境での切り分け』を記述すれば完成です。

ダウンロード - sampleb.pdf

ダウンロード - sampleb.pdf.js.txt




文書のアクションで
閉じる時
保存する時
印刷する時 に それぞれレイヤをONにしておけば
コンテンツを印刷出来ないPDFなんてのも出来ます。
(印刷時に期待値通りの動作をしない場合が多いのでお勧めしません)
(まぁセキュリティ設定すれば良いわけだけど…笑)
Screencapture_20210516_18_39_22


スクリーンキャプチャを取らせない方法と一緒で
今回の方法も『絶対』じゃないので
一般的なスキルの方を対象にAcrobatでフォームを…
なんて時に有効ですので参考にしてください

|

[Acrobat]対象のPDFをAcrobatで開くようにさせる(その2:フォームの全画面配置)

元データはこんな感じの10ページ

Screencapture-20210516-153404

ダウンロード - sample.pdf




フォームを利用する場合
Screencapture_20210516_15_36_44

各ページに『ボタン』か『テキスト』で塗り色白で『全面サイズ』でフォームオブジェクトを配置
名前は任意で1ページ目で作ったフォームオブジェクトを、各ページにコピーします。
重要なのは、『名前が同じ』である事


フォームオブジェクトの配置が終わったら
スクリプトを記述します。
1:文書レベル(ドキュメントレベル)のスクリプトを1つ記述します。
2:ファイルを開いた時に動作するようにします。

文書レベルのスクリプトを1つ作ります
112

開いた時に実行されるようにします 122


起動時の動作は後にして
文書レベルのスクリプトで
コンテンツを『見せる』場合と『隠す』場合のそれぞれの処理を記述します。
見せる場合
Miseru
隠す場合
Kakusu


Screencapture-20210516-160031

function CurtainClose()
{
////コンテンツを隠す
this.getField("Curtains").display = 0;
this.getField("Thumbnail").display = 0;
}

function CurtainOpen()
{
////コンテンツを見せる
this.getField("Curtains").display = 1;
this.getField("Thumbnail").display = 1;
}

起動時に実行されるintに条件入れて、見せる、見せないの分岐
Screencapture-20210516-163724

function int()
{
if( app.viewerVersion <= 10 ) {
CurtainClose();
} else {
CurtainOpen();
}
if( app.viewerType == "Reader" ) {
CurtainOpen();
} else if( app.viewerType == "Exchange" ) {
CurtainOpen();
} else if( app.viewerType == "Exchange-Pro" ) {
CurtainOpen();
} else {
CurtainClose();
}
}
int();


出来上がりです。
クロームやプレビューで『ページパネル』にサムネイルが表示されてしまいますので
コンテンツを必ず隠す事は出来ないが、Acrobatで表示してね?に誘導するには充分でしょう。

ダウンロード - samplea.pdf


ダウンロード - samplea.pdf.js.txt

|

[Acrobat]対象のPDFをAcrobatで開くようにさせる(その1)

対象のPDFをブラウザやプレビュー等で開いた場合に
コンテンツを見せないようにする。
Acrobatで開いた場合は、コンテンツを見せる。
2通り考えました。


エッジ
1_20210516145001
クローム
2_20210516145001
サファリ
3_20210516145001
ファイヤーフォックス
4_20210516145001
プレビュー
5
こんな感じで表示させない処理をします。


考えた方法2通りは
1:フォームを使う
2:レイヤーを使う この2通り

1:フォームを使う
Screencapture_20210516_13_43_21

2:レイヤーを使う
Screencapture_20210516_13_44_44

両方とも『白』いオブジェクトを前面で出して
コンテンツを隠します。
Acrobatで開いたらコンテンツを見せればOK


問題点が2点
1:フォームを使う→サムネイルページで内容が見れてしまう
2:レイヤーを使う→サムネイルページで内容が見れない

1:フォームを使う クロームやプレビューでページパネル内にサムネイル表示されてしまう。
Screencapture_20210516_15_00_57

2:レイヤーを使う アクロバットで開いた時にページパネルのサムネイルが非表示のままになってしまう。
Screencapture_20210516_15_01_14

現時点では1長1短ですが
目的である『コンテンツを見せない』って意味だと『レイヤで隠す』が良いか?と思います
続く

|

[Acrobat js]注釈の作成者を変更する

注釈の作成者を変更します。
注釈の作成者はデフォルトで『ログイン名』が反映されますので
これを、任意に変更します。
ログイン名が氏名以外になっている環境用です。

ソースはこちら

https://github.com/force4u/setAnnotChgAuthorName.js

 

1:スクリプトをインストールする
2:アクロバットを起動させてユーザー情報を設定します
3:署名を選んで
4:変更します。

 

 

▼1:スクリプトをインストールする インストール先は
/Users/ユーザー名/Library/Application Support/Adobe/Acrobat/DC/JavaScripts
WINDOWSはリーダーとDCが別
C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\Javascripts
C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\Javascripts

 

 

▼2:アクロバットを起動させてユーザー情報を設定します 1

 

▼3:署名を選んで 変更したい署名を『署名パネル』で選択して
4

 

▼4:変更します。 3

 

変更される作成者名はユーザー情報の 苗字と名前に依存します
2

 

 

ダウンロード - addsignmenuannotchgauthorname.js.zip

 

リピートを使わずに
コマンド毎で実行する形式にしてあります。
【注意事項】
作成者を変更した注釈は『ロック』されます。
→このロックされるが煩わしい場合は↓こちらを利用してください
57行目から62行目までを削除してください
Photo_20210130104201

 

|

その他のカテゴリー

Accessibility AccessibilityCheck AccessibilityForm AccessibilityInDesign AccessibilityPDF Acrobat Acrobat Action Acrobat Annotation Acrobat AppleScripts Acrobat Character Acrobat Layer Acrobat PDF Embed API Acrobat PDF Form Print Acrobat Plug-ins Acrobat Portfolios Acrobat Print AcrobatBarcode AcrobatDialog AcrobatForm AcrobatJS AcrobatMenu AcrobatPDF AcrobatStamp AcrobatYouTube AddressBook Adobe Adobe InDesign Adobe Photoshop AdobeAppleScript AdobeBridge AdobeIllustrator AdobeJSX aed Alfresco Android AnimationGif Apple Apple Support AppleScript AppleScriptBasics AppleScriptCharacter AppleScriptColor AppleScriptDroplet AppleScriptErrorNum AppleScriptFolder AppleScriptFontBook AppleScriptRename AppleScriptTools AppleSymbols Applications Barcode Barcode2D BarcodePostal BetterHTMLExport Book BOX Browser buzz Certificates CharacterEntity CharacterSets Colors Cool Site CSS Cutting DecoMail DecorationMail Design Desktop Diff DJ dmg DNS Documents Download DTP eBook Editer eMail Envelopes ExifTool Facebook FFmpeg File System Fonts FontsTool FontsWeb FOOD FormPrint ftp Gadget Gif Animation Google Google Chrome Enterprise HexEditor HTML info iPhoto ISBN ISO iTunes iWork iWorkNumbers iWorkNumbersCalendar iWorkNumbersTimecard iWorkPages JavaScript JeditX JeditX Regexp JeditXAppleScript JIS jquery Letterpress Library logo Mac Admin Mac Archiver Mac Browser Mac Browser Plugin Mac QuickLook Mac Setup Mac Spotlight Mac Video Map Memo Microsoft Teams Mobby mobileconfig Moto Movies Music Network Basic ntp OCR Office OfficePowerPoint OSX Paint Pantone Paper PDFlib Permission Photo Pictograms Print Public Python QuickLook QuickTime QuickTimeSetting QuickTimeSound Real Media ReName ResourceFork ruby Sample Screen ScreenCast Search Security SEO Sharing SLAResource Sound Spotlight Stamp SWF TCC.db Tutorial PSD TV Twitter Typography Unicode Utilities Video WEB APP WebFont Wedding Windows WindowsMedia XML XMP XPS YouTube YouTube Rss