Adobe Acrobat Reader Tabs Saving And Autoloading

12,548

Thanks for the fantastic start to implementing this glaring feature omission from a mature product. An Autohotkey script will accomplish what you're looking for. I've created one below that will automatically save the tab layout when you close Acrobat.

This script works with the latest version of Acrobat Pro DC. In this version, the script menu options appear at the bottom of the "view" menu. If your version differs, you'll have to modify this script; please report in the comments if your Acrobat version puts the custom Javascript menu options elsewhere.

if WinActive("ahk_class #32770") & WinActive("Adobe Acrobat", "Do you want to close all tabs or the current tab") {
    Send, !c
    WinWaitActive, ahk_class AcrobatSDIWindow
    Send, !v{Up 3}{Enter}
    WinWaitActive, Warning: JavaScript, Tabs Saved
    Send, {Space}
    WinMenuSelectItem, ahk_class AcrobatSDIWindow, , View, Save Tabs
    Send, ^q
}
Share:
12,548

Related videos on Youtube

Andrey Kartashov
Author by

Andrey Kartashov

Updated on September 16, 2022

Comments

  • Andrey Kartashov
    Andrey Kartashov over 1 year

    I've created Javascript for Acrobat Reader which allows you to save the currently open tabs. It adds the menu items: "Save tabs", "Load tabs", and "Toggle auto load". It saves tabs and page numbers, and restores them as well.

    It's especially helpful for Linux, where there aren't many pdf readers available. However, I haven't been able to figure out how to catch open or close document events, or to set some timer event to automatically store current list of tabs.

    Here is the original API reference for Adobe Acrobat.

    /*
       Here is the script, put it in $HOME/.adobe/Acrobat/9.0/JavaScripts (or in 
       the equivalent program files folder under Windows,) and it will automatically
       be loaded. 
    
       When you need to save current state, choose menu "view -> Save Tabs", to restore 
       recently saved tabs choose "view -> Load Tabs". 
    */
    
    var delim = '|';
    var parentMenu = "View";
    
    /*
     Loading Saved Tabs
    */
    function LoadTabs() {
    
      if (global.tabs_opened == null) {
        return;
      }
    
      var flat = global.tabs_opened.split(delim);
      for (i = 0; i < flat.length; i += 2) {
        try {
          app.openDoc(flat[i]);
          app.execMenuItem("FirstPage");
          for (ii = 0; ii < flat[i + 1]; ++ii) {
            app.execMenuItem("NextPage");
          }
        } catch (ee) {
          app.alert("Error while opening the requested document.\n" + flat[i], 3);
        }
      }
    }
    
    /*
     Function with trusted section returning opened documents
    */
    trustedActiveDocs = app.trustedFunction(function () {
      app.beginPriv();
      var d = app.activeDocs;
      app.endPriv();
      return d;
    })
    
    /*
     Saving Tabs that are opened
    */
    function SaveTabs() {
      var d = trustedActiveDocs();
      var tabs = '';
    
      for (var i = 0; i < d.length; i++) {
        if (i > 0)
          tabs += delim;
        //    app.alert(d[i].path+"------"+d[i].pageNum,3);
        tabs += d[i].path;
        tabs += delim;
        tabs += d[i].pageNum;
      }
      global.tabs_opened = tabs;
      global.setPersistent("tabs_opened", true);
      app.alert("Tabs Saved", 3);
    
    }
    /*
     Toggle auto load tabs
     automatically loading tabs when reader starts
    */
    function ToggleAuto() {
      if (global.tabs_auto == 0 || global.tabs_auto == null) {
        global.tabs_auto = 1;
        global.setPersistent("tabs_auto", true);
        app.alert("Tabs auto loading enabled", 3);
      } else {
        global.tabs_auto = 0;
        global.setPersistent("tabs_auto", true);
        app.alert("Tabs auto loading disabled", 3);
      }
    }
    
    
    app.addMenuItem({
      cName: "-",
      cParent: parentMenu,
      cExec: "void(0);"
    });
    
    app.addMenuItem({
      cName: "&Save Tabs",
      cParent: parentMenu,
      cExec: "SaveTabs();"
    });
    
    app.addMenuItem({
      cName: "&Load Tabs",
      cParent: parentMenu,
      cExec: "LoadTabs();"
    });
    
    app.addMenuItem({
      cName: "Toggle auto load",
      cParent: parentMenu,
      cExec: "ToggleAuto();"
    });
    
    if (global.tabs_auto == 1) {
      LoadTabs();
    }
    
    • Luke Davis
      Luke Davis over 7 years
      Just wanted to say thanks, this is super useful! This page helped me out with installing it.
  • Andrey Kartashov
    Andrey Kartashov over 5 years
    I have not use acrobat for a while :) and linux on servers only. Now a Mac person. Someone need to confirm that it works.