Acrobat表单字段关联咨询:实现输入满行自动跳转的JavaScript代码需求
Acrobat Forms 字段自动跳转填充实现方案
前置操作
先给同组的单行文本字段按跳转顺序命名,例如review_line1、review_line2…review_lineN,N的取值范围为2-5,符合你不同区域的行数要求。所有同组字段设置为固定字号、固定行间距、单行输入,不要开启Acrobat自带的多行自动适配功能,字段尺寸和你需要的单行显示大小一致即可。
核心实现代码
打开任意一个同组字段的属性面板,切换到「动作」标签,触发条件选择「按键」,动作为「执行JavaScript」,粘贴以下代码即可,所有同组字段都要添加相同的代码:
// 仅需修改此处配置:按跳转顺序填入同组字段的名称 const groupFields = ["review_line1", "review_line2", "review_line3"]; const currentName = event.target.name; const currentIdx = groupFields.indexOf(currentName); if (!event.willCommit || currentIdx === groupFields.length - 1) return; const currentField = this.getField(currentName); const availableWidth = currentField.rect[2] - currentField.rect[0]; const fullTextWidth = currentField.getTextSize(event.value, 0, event.value.length); // 内容宽度超出字段可用宽度时自动切到下一行 if (fullTextWidth > availableWidth * 0.95) { let splitPosition = event.value.length; // 计算可完全显示的最大字符数 while (splitPosition > 0 && currentField.getTextSize(event.value, 0, splitPosition) > availableWidth * 0.95) { splitPosition--; } // 分割内容到下一行字段 const nextField = this.getField(groupFields[currentIdx + 1]); currentField.value = event.value.slice(0, splitPosition); nextField.value = event.value.slice(splitPosition) + nextField.value; // 跳转光标到下一行末尾 nextField.setFocus(); nextField.textSelection = [nextField.value.length, nextField.value.length]; }
配置调整说明
- 代码第一行的
groupFields数组按你的实际字段名、跳转顺序修改即可,2-5个字段都支持 - 代码中的
0.95为宽度冗余系数,若字段左右留白较多可调低到0.9,留白少可调高到0.97 - 同组所有字段必须使用相同的字体、字号,否则宽度计算会出现偏差
效果参考

配置完成后输入内容填满当前行时会自动把超出内容移动到下一行字段,同时光标自动跳转,所有行的显示格式固定,不会出现字号缩放的问题。
内容的提问来源于stack exchange,提问作者Liz
相关产品推荐
相关产品推荐

