Acrobat Javascript - 书签页数?

时间:2015-06-21 07:16:01

标签: javascript acrobat bookmarks

好的,所以我在这里试图让自己熟悉Adobe 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);

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

1 个答案:

答案 0 :(得分:0)

我通过使用当前书签的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(...)

不幸的是,这是引用书签的唯一方法。如果您想通过它的名称查找书签,则可以将所有书签名称存储在具有子索引的对象中。这是一个黑客攻击,但当你有一个包含大量书签的文档时它会很有帮助。