• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers

Function on a bookmark

Engaged ,
Oct 16, 2018 Oct 16, 2018

Copy link to clipboard

Copied

How can I create these bookmarks into a structure that is Tools > No Color, Black (Ground), 032 (Red) (Battery Power) (Bookmark names under the Parent bookmark Tools). Then I also need to have it add a javascript to the bookmarks (ie   No Color bookmark would run a function noColor();)

I found a tutorial I believe Thom Parker created on creating bookmarks....

but being fairly new to javascript in Acrobat I don't think I really understand what his function is doing.

var checkedOne = 0;

var checkedTwo = 0;

var checkedThree = 0;

var foundLayers = [];

var ocgArray = this.getOCGs();

for (var i = 0; i < ocgArray.length; i++) {

    if (ocgArray.name == "No Color" && checkedOne == "0") {

        foundLayers.push(ocgArray.name);

        checkedOne++;

    }

    if (ocgArray.name == "Black (Ground)" && checkedTwo == "0") {

        foundLayers.push(ocgArray.name);

        checkedTwo++;

    }

    if (ocgArray.name == "032 (Red) (Battery Power)" && checkedThree == "0") {

        foundLayers.push(ocgArray.name);

        checkedThree++;

    }

}

function MakeBkMks(oBkMkParent, aBkMks)

{

   for(var i=0;i<aBkMks.length;i++)

   {

      if(typeof(aBkMks) == "string")

          oBkMkParent.createChild({cName:aBkMks, nIndex:i});

      else

      {// Assume this is a sub Array

         oBkMkParent.createChild({cName:aBkMks[0], nIndex:i});

         MakeBkMks(oBkMkParent.children, aBkMks.slice(1) );

      }

   }

}

// Create the Bookmarks

MakeBkMks(this.bookmarkRoot, foundLayers)

TOPICS
Acrobat SDK and JavaScript , Windows

Views

303

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

LEGEND , Oct 16, 2018 Oct 16, 2018

The MakeBkMks function uses recursion, which can be a bit difficult to understand if you haven't used it in programming before.

To add a JavaScript action to a bookmark, you'd use the bookmark.setAction method, as documented here: Acrobat DC SDK Documentation

You didn't mention what the JavaScript should be for each bookmark, but it will probably be best to modify the code that adds the OCG names to the foundLayers array to include the code you want to add to the corresponding bookmark. So instea

...

Likes

Translate

Translate
LEGEND ,
Oct 16, 2018 Oct 16, 2018

Copy link to clipboard

Copied

This script creates bookmarks based on OCG (known as "layers"). The bookmark only appears if a layer by the same name exists. Does it in your case? If you want them every time you may have chosen a much too complicated model.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Oct 16, 2018 Oct 16, 2018

Copy link to clipboard

Copied

Yes I need it to be based on layers that exist. That is it's intent. I just don't know how to get it to also create a parent bookmark called Tools and then create the bookmarks under that parent. Then also assign a javascript function to the created bookmarks.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
LEGEND ,
Oct 16, 2018 Oct 16, 2018

Copy link to clipboard

Copied

The MakeBkMks function uses recursion, which can be a bit difficult to understand if you haven't used it in programming before.

To add a JavaScript action to a bookmark, you'd use the bookmark.setAction method, as documented here: Acrobat DC SDK Documentation

You didn't mention what the JavaScript should be for each bookmark, but it will probably be best to modify the code that adds the OCG names to the foundLayers array to include the code you want to add to the corresponding bookmark. So instead of:

        foundLayers.push(ocgArray.name); 

You could do:

        foundLayers.push([ocgArray.name, "//JavaScript code as a string goes here;"]);

And get the bookmark name and code text from the array values.

To create the parent bookmark, you'd use the createChild method like that code shows, using the doc.bookmarkRoot as the parent, and then use that as the parent in that last line of the code you posted.

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Oct 16, 2018 Oct 16, 2018

Copy link to clipboard

Copied

LATEST

Thank you so much for the excellent explanation George_Johnson​. That worked exactly how I needed it to. I'm still learning and sincerely appreciate the time others take to share their knowledge on a subject/project I am working on!

Likes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines