如何用JavaScript调整可填写PDF表单字段的字符间距
调整PDF表单字段字符间距的正确JS实现
你原来的代码无效是因为textField.textFont.textState是只读属性,无法直接修改字符间距。要实现这个需求,需要通过修改字段的**默认外观(Default Appearance)**来设置,这是Acrobat JS控制表单文本样式的标准方式。
方法一:直接修改字段的默认外观字符串
PDF表单字段的defaultAppearance属性是一个字符串,定义了文本的字体、大小、颜色以及字符间距等样式。其中字符间距由/Tc参数控制,单位是千分之一倍的字体大小(比如字体大小12pt时,/Tc 125对应1.5pt的字符间距)。
代码示例:
var field = this.getField("field1"); var currentDA = field.defaultAppearance; // 处理已有/Tc参数的情况:替换为目标值 if (currentDA.includes("/Tc")) { currentDA = currentDA.replace(/\/Tc\s+[\d.-]+/, "/Tc 125"); // 125对应1.5pt(12pt字体下) } else { // 无/Tc参数时,在字体设置后添加(匹配/Tf 字体名 字号的格式) currentDA = currentDA.replace(/(\/Tf\s+[\w\/]+\s+\d+)/, "$1 /Tc 125"); } // 应用修改并刷新字段 field.defaultAppearance = currentDA; // 强制刷新显示 field.display = display.noPrint; field.display = display.visible;
如果需要固定1.5pt的字符间距(不随字体大小变化),可以动态计算/Tc的值:
var field = this.getField("field1"); var fontSize = field.fontSize; var charSpacingPt = 1.5; var tcValue = Math.round(charSpacingPt * 1000 / fontSize); var currentDA = field.defaultAppearance; if (currentDA.includes("/Tc")) { currentDA = currentDA.replace(/\/Tc\s+[\d.-]+/, `/Tc ${tcValue}`); } else { currentDA = currentDA.replace(/(\/Tf\s+[\w\/]+\s+\d+)/, `$1 /Tc ${tcValue}`); } field.defaultAppearance = currentDA; field.display = display.noPrint; field.display = display.visible;
方法二:通过字段格式化事件动态应用
如果希望用户输入文本时自动应用字符间距,可以给字段添加Format事件:
var field = this.getField("field1"); field.setAction("Format", ` var charSpacingPt = 1.5; var fontSize = event.target.fontSize; var tcValue = Math.round(charSpacingPt * 1000 / fontSize); var newDA = event.target.defaultAppearance.replace(/\/Tc\s+[\d.-]+/g, "") + " /Tc " + tcValue + " "; event.target.defaultAppearance = newDA; `);
注意事项
- 仅支持Adobe Acrobat/Reader环境,其他PDF编辑器可能不兼容Acrobat JS
- 修改后需要刷新字段显示(通过切换
display属性实现) - 该设置会应用到字段内的所有文本,包括已有内容和新输入内容
内容的提问来源于stack exchange,提问作者TipVisor
相关产品推荐
相关产品推荐

