AcroForm 文档(打开时)级脚本对比 Excel VBA 参考
文档级脚本位于文档JavaScript结构的顶层,一个PDF可以包含任意数量的文档级脚本。这些脚本在Acrobat或Adobe Reader中"打开文档时"首先执行。需要注意的是,由于这些脚本可能在文档完全加载并显示给用户之前就已运行,因此应避免在其中编写依赖文档加载完成的代码。例如,任何影响文档页面、创建可视化元素或用户界面元素的代码都不应放在文档脚本中。
文档脚本通常用于:
- 执行初始化操作
- 进行顶层环境测试
- 定义文档中其他代码将使用的函数和变量
示例:在文档脚本中定义创建UI元素的函数是可行的,但直接在该脚本中调用此类函数可能存在风险。
变量与函数
在文档脚本(或文档的任何脚本)中定义的变量或函数均属于文档作用域。这意味着文档内的所有脚本均可直接访问这些变量或函数,无需额外限定符。
文档脚本示例
// 定义变量
var nDoc1Var = 3;// 文档内任意脚本均可使用该变量
b = nDoc1Var + 1;// 也可通过文档限定符访问(非必需)
b = this.nDoc1Var + 1;
- 前两行为常规用法,最后一行通过
this
关键字(指向文档对象)访问变量。 - 在文档作用域内,
this
可省略;但在文档作用域外需通过文档对象访问。
在文档作用域外访问变量/函数
若多个文档的脚本需协同工作,或设计自动化脚本处理特定文档/表单时,可能需要在文档作用域外访问其变量/函数。
可信脚本示例
// 打开文档
var oDoc1 = app.openDoc(...文档路径...);// 设置文档变量(仅限可信上下文执行)
oDoc1.nDoc1Var = 1;
注意:Acrobat会阻止非可信上下文访问文档作用域对象,因此上述代码仅在可信脚本中有效。
非可信文档上下文的访问机制
早期Acrobat通过**文档披露(document disclosure)**实现安全机制。需在文档脚本中主动披露对象,其他文档的非可信脚本才能通过app.activeDocs
数组访问已披露的文档。
文档脚本
// 披露当前文档对象
this.disclosed =