049.【ID】【Acrobat】フォーム作成用スクリプト色々
書いたコード
InDesign用
タブオーダー並べ替え
// テキストボックス01→ラジオボタン02-01→ラジオボタン02-02→チェックボックス03 のようにする var doc = app.activeDocument; var pg = doc.pages[4] // ここでページ指定 var tmp = pg.tabOrder var arr = pg.tabOrder.sort(function(a, b) { var nameA = a.name.replace(/[ァ-ヿ]/g, ""); var nameB = b.name.replace(/[ァ-ヿ]/g, ""); if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } return 0; }) pg.tabOrder = arr;
ラジオボタンを別ページに複製
var doc = app.activeDocument var b = doc.pages[0].radioButtons; var tgtP = [2, 3, 4] // 複製先のページを指定 for (var i = 0; i < b.length; i++) { for (var j = 0; j < tgtP.length; j++) { var tmp = b[i].duplicate(tgtP[j]); tmp.name = b[i].name; tmp.exportValue = b[i].exportValue; // checkBoxesやtextBoxesならこの行は不要 } }
Acrobat用
全てのチェックボックス・ラジオボタンのスタイルを十字形+実線に
for (var i = 0; i < this.numFields; i++) { var fname = this.getNthFieldName(i); var f = this.getField(fname); if (f.type == "radiobutton" || f.type == "checkbox") { f.style = style.cr; f.borderStyle = border.s; } }
ラジオボタンの場合「同じ名前と選択内容のボタンを同時に選択」設定に
for (var i = 0; i < this.numFields; i++) { var fname = this.getNthFieldName(i); var f = this.getField(fname); if (f.type == "radiobutton") { f.radiosInUnison = true; } }
for (var i = 0; i < this.numFields; i++) { var fname = this.getNthFieldName(i); var f = this.getField(fname); if (f.type == "radiobutton" || f.type == "checkbox") { f.value = false; } if (f.type == "text") { f.value = ""; } }
メモ
フォームに関して、現状InDesignではできないがAcrobatではできる設定が多くある。
また、ラジオボタンをマスターページに置いた状態でPDFを書き出すとInDesignがシャットダウンするという不具合がある(多分)(Win CC2019)。
よってInDesignでフォームの作成とある程度の設定を行った後、Acrobatでさらに設定を加えることになる場合が多い。
Acrobatでのみ可能な設定には例えば以下のようにものがある。
- チェックボックス・ラジオボタンのスタイル(十字形とか丸形とか)
- チェックボックス・ラジオボタンの外枠のスタイル(実線とか破線とか)
- ラジオボタンの「同じ名前と選択内容のボタンを同時に選択」
- 字数指定
- 桁区切り・小数点以下桁数などの書式設定
- 中央・右揃え(Id上での設定は反映されず一律左揃えになる)
checkBoxesのvalueは多分以下のような挙動になっている。
分かった…言語によって違うみたいだ。日本語版AcrobatDCなら f.value = "はい" とする。
— haraguai-is-bad (@haraguai_is_bad) 2019年8月14日
英語版なら"On"になるしロシア語版なら"Да"になる。
そうなるとfalseでリセット出来るのが謎な気がしてくる。