Adobe Acrobat Pro DC JavaScript字段属性未传播

时间:2016-12-20 16:31:19

标签: javascript adobe acrobat

我在Adobe Acrobat Pro DC自定义项目的中途被引入。此项目的目标是在每个页面的左边缘添加警告。我得到了一个JavaScript,它有一个例外,并要求修复该异常。

代码是:

var inch = 72; 
for (var p = 0; p < this.numPages; p++) { 
    var aRect = this.getPageBox( {nPage: p} ); 
    aRect[0] = 8.25*inch; //how far from the left the box ends
    aRect[1] = 0.5*inch; //how high from the bottom the box is
    aRect[2] = 7.75*inch; //how far from the left the box starts
    aRect[3] = 11.0*inch; //how tall the box is
    var f = this.addField("ControlledDoc", "text", p, aRect ) 
    f.rotation = 270;
    f.delay = true; 
    f.textSize = 7.5; 
    f.textFont = font.HelvB; 
    f.textColor = color.red; 
    f.alignment = "center"; 
    f.readonly = true; 
    f.display = display.visible; 
    f.delay = false; 
}
var myWillSaveScript = 'var f = this.getField("ControlledDoc"); \r' 
+ 'f.value = "This is an electronic controlled copy of a paper based document management system. When printed on the copy machine it becomes an uncontrolled paper copy valid until the end of the printing day."; \r';
this.setAction("WillSave", myWillSaveScript);

当文档长度超过一页时,会出现问题。按预期在每个页面上复制ControlledDoc字段。每个页面都有一个ControlledDoc#n-1字段,其中n是页码。在第一页上,f.rotation设置被保留并显示在UI中,因为“属性”对话框中的“方向”下拉列表设置为270.但是,在第二页和后续页面上,“方向”设置为0.我可以手动编辑文档并将Orientation设置为270,但这违背了使用JavaScript自动执行操作的目的。

我是使用JavaScript控制Acrobat Pro DC的新手,所以如果我错过了一些愚蠢的东西,我不会感到惊讶......

我需要更改什么才能使旋转设置粘在第二页和后续页面上?

2 个答案:

答案 0 :(得分:1)

字段属性可以在字段级别上(对于字段的所有副本都相同,具有相同的nam),或者在窗口小部件级别上(可以与字段的副本不同以复制字段)。

Acrobat JavaScript文档包含这些属性的列表。不幸的是,这两个列表(字段级别和窗口小部件级别)不包含rotation属性。这意味着,我们并不真正知道它是字段还是小部件级别。根据您的描述,我感觉它是小部件级别。

您可以尝试为每个页面创建单独的字段。你会用

行来做到这一点
var f = this.addField("ControlledDoc." + p, "text", p, aRect) ;

关于delay属性:我总是使用doc.delay属性(而不是field.delay),并且因为它在循环之外,所以它可以提供最大的性能增益。但是,如果脚本从循环内退出,我将不得不通过控制台将延迟设置为false。根据我的经验,这将创建所有外观(但为了找出,我们必须进入该页面,然后立即创建...)。

答案 1 :(得分:0)

我假设您在运行脚本时在第1页上进行了操作。这就是第一页看起来正确的原因。

delay属性,如果为false,则告诉Acrobat延迟更新字段的外观,直到将其设置为true。当您将字段添加到页面时,您要告诉Acrobat在设置完所有设置之前不要生成外观......这样就行了......但是,我怀疑,您从未访问过后续内容即使现在将delay属性设置为true,页面也不会为这些页面更新外观。只需拉出设置延迟属性的两行就可以了。