Skip to main content
Participating Frequently
August 27, 2023
Answered

Add javasceipt action to a annotation using javascript (programmatically)

  • August 27, 2023
  • 1 reply
  • 1825 views

1. For the freetext anotations (many in each page) in a pdf , i need to add hyperlink, which will take the name of the freetext annotation content, 

2.  the hyperling on mouseclick should run a javascript action, that has to open another pdf at the named location

3. The "namedlocation" title is same as the freetext content in the original pdf.

 

ChatGPT code is attached, which mostly works.. but is not able to add the javascript action to the hyperlink

 

// Step 1: Initialize an array to keep track of processed free text contents
var processedContents = [];

// Step 2: Iterate through each page in the PDF
for (var pageNum = 0; pageNum < this.numPages; pageNum++) {
  // Step 3: Search for annotations on the page
  var annots = this.getAnnots({ nPage: pageNum });
  if (annots) {
    for (var i = 0; i < annots.length; i++) {
      var annot = annots[i];
      if (annot.type === "FreeText" && annot.author === "CONTROL VALVE") {
        var dest = annot.contents; // Named destination
        var externalPDF = "C:/Users/LENOVO/OneDrive - KBR/Desktop/DESTINATIOn.pdf"; // Updated file path

        // Check if the content has already been processed
        if (processedContents.indexOf(dest) === -1) {
          processedContents.push(dest);

          // Step 4: Create a hyperlink around the free text annotation
          var linkRect = annot.rect;
          var link = this.addLink(pageNum, linkRect, {
            borderColor: color.blue, // Set border color to blue
            borderWidth: 1,         // Set border width to 1 point
          });

          // Step 5: Set the link's appearance properties (optional)
          link.textSize = 12; // Set the text size
          link.textFont = font.Helvetica; // Set the font
          link.textColor = color.blue;
          link.fillColor = color.transparent;
          link.text = "Link Text"; // Set the link text

          // Step 6: Create the custom JavaScript for the "Run a JavaScript" action
          var javascriptContent = `
            app.openDoc('${externalPDF}', {
              page: 0,
              zoom: 'fitpage',
              dest: '${dest}'
            });
          `;

          // Step 7: Set the "Run a JavaScript" action for Mouse Up event
          var action = link.setAction("MouseUp", javascriptContent);
        }
      }
    }
  }
}

 

This topic has been closed for replies.
Correct answer try67

Thanks very much for your reply

I rechecked, creating a hyperlink and the properties do show a "mouseup" action that can be set to a javascript.

 

i needed to programmatically set this javascript action


Yes, links have a MouseUp action, but since it's the only one they have you don't specify it as a trigger. You only need to specify the script itself, as a string. This is all documented in the Acrobat JS API Reference.

1 reply

try67
Community Expert
Community Expert
August 27, 2023

There are plenty of errors in this code, as is usually the case with ChatGPT-generated code for Acrobat JavaScript.

The entire Step 5 part is invalid, as links don't have any text (and therefore no text size, font, color, fill color, etc.), for example.

Participating Frequently
August 27, 2023

Thanks for your reply..

 

However the non working part is the step seven. to assign the javascript action to the setAction function..

Thw wnd result is only the text "Mouseup" is inside the javascript code.

 

Please help to correct the code as I am not a regular coder..

try67
Community Expert
Community Expert
August 27, 2023

Yes, that part is also incorrect, as links don't have a Mouse Up action.