【问题标题】:Adobe Acrobat - Error Iterating Over All Fields in a PDF with JavaScriptAdobe Acrobat - 使用 JavaScript 遍历 PDF 中的所有字段时出错
【发布时间】:2016-06-13 04:19:13
【问题描述】:

我无法遍历文档中的所有字段以删除工具提示。这是我的代码:

var index=0;
while(index<this.numFields)
{
    var nom=this.getNthFieldName(index);
    var fieldName=this.getField(nom);
    fieldName.userName = "";
    index=index+1;
}

我收到一条错误消息,提示 fieldName is null,我的脚本无法运行。我已经看过这个答案了:

Iterating over all fields in a PDF form with JavaScript

我也收到与该代码相同的错误。如果我使用var fieldName=this.getField("field1"); 手动将字段名称分配给fieldName,则可以正常工作。

有谁知道为什么这会在我身上出错?

编辑:

我可以遍历列表并将nom 输出到控制台,这样我就知道它正确地获取了字段的名称。将该名称放入this.getField(nom) 语句中似乎有困难。不知道为什么...

【问题讨论】:

    标签: javascript pdf null adobe acrobat


    【解决方案1】:

    为什么要使用 while...?

    使用完全相同(将鼠标提示文本设置为空白字符串)更简单

    for (var i = 0 ; i < this.numFields ; i++) {
    this.getField(this.getNthFieldName(i)).userName = "" ;
    }
    

    应该这样做。

    但是,除非你有很好的理由,否则不建议将userName 设置为空白字符串;如果您的表单与辅助设备一起使用,则需要它,它也是最接近和最简单的帮助项目。

    【讨论】:

    • 我遇到了基本相同的错误:TypeError: this.getField(this.getNthFieldName(i)) is null
    • 我的问题不是 while vs for 循环问题。这是另一回事。
    • 这听起来很像一个拙劣的 PDF 文档。循环看到一个字段名,但相应的字段不存在。您可以尝试在脚本接触字段之前使用字段名称的 app.alert() 来定位罪魁祸首,或者将字段名称写入控制台(或使用调试器并设置断点)。表格是如何创建的? Acrobat 中的另存为... 是否可以解决此问题(只需确保您已禁用“首选项”中的“另存为...优化快速 Web 视图”选项)。
    • 我已经尝试将所有名称输出到控制台并且效果很好。它只是不喜欢this.getField(nom) 行。该表单是使用自动表单识别功能创建的,它会尝试根据它认为是空白的内容来查找您的所有字段。
    • 呃...想通了。显然,自动字段生成器用前导空格命名了一些字段,导致脚本出错。我修复了六个字段,现在它就像一个魅力。
    【解决方案2】:

    我发现了我的问题。

    创建表单时,我使用自动字段检测为我创建字段以节省时间(此表单上有大约 250 个字段)。我首先需要该脚本的原因是删除该功能生成的糟糕的工具提示名称。

    显然,字段检测功能以其无限的智慧命名了一些带有前导空格的字段(类似于“OF INFORMATIONrow1”)。由于getNthFieldName(index) 按字母顺序返回字段,因此它会返回其中一个损坏的字段并立即出错,因为getField() 不喜欢名称中的前导空格。

    我重命名了少数字段,脚本就像一个魅力。

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多