在 Adobe Acrobat XI 中使用 JavaScript 修改 PDF 字段值
Using JavaScript in Adobe Acrobat XI to modify a PDF field value
我在 Adobe Acrobat XI 中编辑的 PDF 中有两个字段,"Text2#0" 和 "Text2#1"。
我正在努力做到这一点,当您在第二个字段 (Text2#1) 中输入文本时,它会显示在第一个字段 (Text2#0) 中,但包含在一对星号之间(这是用于条形码生成器)。
在 'Actions' 选项卡上的 Text2#1 的 'Text Field Properties' window 中,我将 MouseUp 触发器设置为 运行 a JavaScript:
var barcodeField = this.getField("Text2#0");
var barcodeLength = barcodeField.length;
if( barcodeField.charAt(0) != "*" ){
barcodeField = "*" + barcodeField;
};
if( barcodeField.charAt(barcodeLength - 1) != "*" ){
barcodeField = barcodeField + "*";
};
但是,从未添加封装星号。我错过了什么?
感谢阅读!
编辑:
感谢 Max 在下面的回答。我所做的是按照他提到的那样更改字段的名称(条形码字段更改为 "barcode",文本字段更改为 "Text2"),然后我创建了一个 'On Blur' 触发器(当用户停止与与 Text2 关联的字段交互。这是触发运行的 JS:
getField("barcode").value = getField("Text2").valueAsString;
var barcodeField = this.getField("barcode");
var textField = this.getField("Text2");
barcodeField.value = "*" + textField.value + "*";
没有添加星号也就不足为奇了。
barcodeField变量是一个Field对象,Field对象不能添加字符串。
为了对字段的内容进行操作,您需要字段对象的值 属性。
也就是说,您的行必须如下所示:
barcodeField.value = "*" + barcodeField.value ;
然而,还有一个更根本的问题。
字段名称的#1
或#2
后缀是该字段的小部件编号。在 Acrobat JavaScript 中,字段的键是它的名称。当您有多个名称相同的字段时,它们会通过小部件编号进行区分。
一些字段对象属性适用于字段(并且对所有小部件都相同),其他属性适用于小部件(并且因小部件而异)。例如,rect
适用于小部件。但是 value
适用于该字段,这意味着具有该名称的所有字段显示相同。
因此,如果您希望一个字段显示星号,一个字段不显示星号,则必须使用两个字段,字段名称不同。
示例可能如下所示:
var bcf = this.getField("barcodeField") ; // has plain value
var bcfa = this.getField("barcodeFieldA") ; // has value with asterisks
bcfa.value = "*" + bcf.value + "*" ;
如果将此代码添加到 bcfa 字段的计算事件中,则必须将最后一行更改为
event.value = "*" + bcf.value + "*" ;
这样就可以了。
我在 Adobe Acrobat XI 中编辑的 PDF 中有两个字段,"Text2#0" 和 "Text2#1"。
我正在努力做到这一点,当您在第二个字段 (Text2#1) 中输入文本时,它会显示在第一个字段 (Text2#0) 中,但包含在一对星号之间(这是用于条形码生成器)。
在 'Actions' 选项卡上的 Text2#1 的 'Text Field Properties' window 中,我将 MouseUp 触发器设置为 运行 a JavaScript:
var barcodeField = this.getField("Text2#0");
var barcodeLength = barcodeField.length;
if( barcodeField.charAt(0) != "*" ){
barcodeField = "*" + barcodeField;
};
if( barcodeField.charAt(barcodeLength - 1) != "*" ){
barcodeField = barcodeField + "*";
};
但是,从未添加封装星号。我错过了什么?
感谢阅读!
编辑:
感谢 Max 在下面的回答。我所做的是按照他提到的那样更改字段的名称(条形码字段更改为 "barcode",文本字段更改为 "Text2"),然后我创建了一个 'On Blur' 触发器(当用户停止与与 Text2 关联的字段交互。这是触发运行的 JS:
getField("barcode").value = getField("Text2").valueAsString;
var barcodeField = this.getField("barcode");
var textField = this.getField("Text2");
barcodeField.value = "*" + textField.value + "*";
没有添加星号也就不足为奇了。
barcodeField变量是一个Field对象,Field对象不能添加字符串。
为了对字段的内容进行操作,您需要字段对象的值 属性。
也就是说,您的行必须如下所示:
barcodeField.value = "*" + barcodeField.value ;
然而,还有一个更根本的问题。
字段名称的#1
或#2
后缀是该字段的小部件编号。在 Acrobat JavaScript 中,字段的键是它的名称。当您有多个名称相同的字段时,它们会通过小部件编号进行区分。
一些字段对象属性适用于字段(并且对所有小部件都相同),其他属性适用于小部件(并且因小部件而异)。例如,rect
适用于小部件。但是 value
适用于该字段,这意味着具有该名称的所有字段显示相同。
因此,如果您希望一个字段显示星号,一个字段不显示星号,则必须使用两个字段,字段名称不同。
示例可能如下所示:
var bcf = this.getField("barcodeField") ; // has plain value
var bcfa = this.getField("barcodeFieldA") ; // has value with asterisks
bcfa.value = "*" + bcf.value + "*" ;
如果将此代码添加到 bcfa 字段的计算事件中,则必须将最后一行更改为
event.value = "*" + bcf.value + "*" ;
这样就可以了。