Acrobat Javascript - 书签页数?

Acrobat Javascript - Bookmark Page Count?

好的,我来这里是为了让自己熟悉 Adob​​e Acrobat 的 Javascript API -- 我觉得我可能错过了一些做某些事情的简单方法,但让我们发现一起出去。

问题: 我将如何找到属于书签的页数?

例如,我有以下书签布局:

Intro [3 pages]  
Factions [2 pages]  
Character [3 pages]  
End [1 page]  

(本来可以张贴图片,但我没有这样做的权限:/)

本质上,我希望能够自动提取每个书签的页数,因为我正在做一个小项目,以加快工作速度。

到目前为止我的代码:

/* Count Bookmark Children
    TODO: Count Pages of each Bookmark */

function CountBm(bm) {
    var count = 0;

    console.println("Bookmark name: " + bm.name);
    bm.execute(); // goto bm -- not necessary, just for personal reasons

    console.println("Bookmark Start Page: " + (this.pageNum+1));

    /* This would only work if each page in the bookmark was a child
       of the bookmark being checked */
    if (bm.children != null) {
        for (var i = 0; i < bm.children.length; i++)
            count++;
    }
    console.println("Pages in Bookmark: " + count);
}

var bkmk = bookmarkRoot.children[2]; // Character Bookmark
CountBm(bkmk);

此外,对于该代码的最后两行,是否有更好的方法来引用特定的书签?也许是名字?

我通过使用当前书签的 execute() 目标相对于下一个书签的 execute() 目标来完成此操作。所以假设书签是按照文档的顺序排列的,只需 运行 execute() 在下一个书签上,然后使用 this.pageNum 来计算你向前跳转了多少页。

类似于:

this.pageNum = 0;

for (var i = 1; i < this.bookmarkRoot.children.length; i++) {
     page = this.pageNum;
     this.bookmarkRoot.children[i].execute();
     console.println("This bookmark is " + (this.pageNum-page) + " pages long");
}

您也可以添加对孙子书签的处理,具体取决于您的应用程序。正确的解决方案取决于书签的结构。对于您的应用程序,上面的打印到控制台行可以替换为 this.extractPages(...)

很遗憾,这是引用书签的唯一方式。如果您想通过名称查找书签,您可以将所有书签名称及其子索引存储在一个对象中。这是一个 hack,但当您的文档包含大量书签时它会很有帮助。